skraceni kurs ucenja picbasica

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: stojke369, pedja089, [eDo], trax

Re: skraceni kurs ucenja picbasica

Postby elena2610 » 07-05-2016, 14:41

se izvinuvam
Attachments
proekt.jpg
proekt.jpg (15.39 KiB) Viewed 3347 times
elena2610
 
Posts: 2
Joined: 07-05-2016, 12:53

Re: Re: skraceni kurs ucenja picbasica


PIC16F648A

Postby electron » 10-07-2016, 21:43

U pitanju je PIC16F648A :

https://s32.postimg.org/atwbhrvpx/Clip.jpg
https://s32.postimg.org/qgnkv59hx/Clip_2.jpg

Nikako nece da mi radi LCD displej, evo kratkog koda, koristio bih interni oscilator 4MHz,nece ni ovo da mi radi:

Code: Select all
#CONFIG
  __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF

  #ENDCONFIG
 
clear

 OPTION_REG.7 = 1            'Weak pull-ups enabled
 
    DEFINE LCD_DREG PORTB               ' I/O port where LCD is connected
    DEFINE LCD_DBIT 4
    DEFINE LCD_RSREG PORTA
    DEFINE LCD_RSBIT 7                  ' Register select pin RA4
    DEFINE LCD_EREG PORTA
    DEFINE LCD_EBIT 6                   ' Enable pin RA2
    DEFINE LCD_BITS 4                   ' 4-bit data bus
    DEFINE LCD_LINES 2                  ' LCD has 2 character lines

    DEFINE OSC 4
    DEFINE BUTTON_PAUSE 100
   
'*****************************************************************************
'Pinout for EasyPic5

   
   Heat         Var PORTA.1  ' Relej
    DQ            Var   PORTA.2   ' One-wire data pin
    DQ1            Var   PORTA.4   ' One-wire data pin
   
    Mode_B         Var PORTB.3    'Taster Mode
    UP_B            Var PORTA.0    'Taster UP
    DOWN_B           Var PORTA.3     'Taster Down
   
'*****************************************************************************
'Configs EasyPic5
'*****************************************************************************



TRISA=%00011101                                     '        1-input
TRISB=%00001000                                     '        0-output
'*****************************************************************************

   CMCON = 7            ' Set PORTA to digital
   Pause 100            ' Wait for LCD to start up

mainloop:
   Lcdout $fe, 1        ' Clear screen
   Pause 500            ' Wait .5 second

   Lcdout "Hello"       ' Display "Hello"
   Pause 500            ' Wait .5 second

   Lcdout $fe, $c0, "World" ' Move to line 2  and display "World"
   Pause 500            ' Wait .5 second
   Goto mainloop        ' Do it forever


RA0-Taster UP
RA1-Relej3
RA2-DS18b20
RA3-Taster DOWN
RA4-DS18B20
RA6- LCD(Enable)
RA7-LCD(RS)

RB0-DS18B20
RB1-Relej1
RB2-Relej2
RB3-Taster MODE

LCD se nalazi na portu RB4-RB7
User avatar
electron
 
Posts: 208
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Postby Kukinjos » 10-07-2016, 21:54

Možda ti fali definicija oscilatora:
Code: Select all
define osc 4

?
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
User avatar
Kukinjos
 
Posts: 1686
Joined: 28-03-2012, 18:01
Location: Split

Re: skraceni kurs ucenja picbasica

Postby electron » 10-07-2016, 22:53

Ima definicija oscilatora, odmah posle definicija za lcd
User avatar
electron
 
Posts: 208
Joined: 28-02-2009, 19:20
Location: Serbia

Re: skraceni kurs ucenja picbasica

Postby WhiteHead » 11-07-2016, 06:47

Pull-upuj RS pin displeja.
Ako kaniš pobijediti, ne smiješ izgubiti
User avatar
WhiteHead
 
Posts: 1487
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: skraceni kurs ucenja picbasica

Postby alarmi ns » 20-09-2016, 09:05

Pozdrav svima dali mi neko moxze pomoci kako na picu 16f688 port a.4 da nateram da radi kao taster. na pini je pool-up otpornik 4k7 ka vcc a taster okidda na 0. Cip uopste nereaguje na stiskanje tog tastera,svi ostali rade evo deo koda gde sa =m testirao tastere kad sam video da me zezaju
Code: Select all
    '---------------------------OSIGURACI---------------------------
         ' 16F688
        #CONFIG
        __CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CPD_OFF & _CP_OFF & _BOREN_OFF
        #ENDCONFIG
        DEFINE OSC 8
        '-------------------------- PODESAVANJA ------------------------
        OSCCON     = %01110000   ' INT_OSC_8MHZ
        OPTION_REG = %01000000 ' PULL UP ENABLE, KAD JE BIT 7 = 0 !!!!
        WPUA = %00110000           ' WEAK PULLUP NA PORTOVIMA A5 I A4
        CMCON0     = %00000111     ' disable comparator
        ANSEL = 0
        DEFINE PULSIN_MAX 6000     'Maximum counts allowed before pulsin times out
        TRISA   = %110000
        TRISC   = %111000
       
   
     symbol rele = porta.1
     output rele
 
    symbol izlaz = porta.2
    output izlaz
   
    symbol led = portc.0
    output led
    led = 0
   '**********TASTERI**********************
    symbol reset = porta.4
    input reset
   
    symbol taster1 = porta.5
    input taster1
   
    symbol test = portc.4
    input test
   
    symbol taster2 = portc.5
    input taster2
   
    symbol taster3 = portc.3 'taster5
    input taster3
   
    symbol taster4 = portc.1
    input taster4




   '**********************************************************
  'TEST TASTERA OBRISI
  DO
IF reset=0 THEN   'OVDE GRESIIIIIIIIII
LED = 1
PAUSE 1000
LED = 0             ' RESET  JE PORT A.4
PAUSE 1000
ENDIF
   
   
   
   LOOP
'******************************************************
alarmi ns
 
Posts: 29
Joined: 29-06-2013, 20:13

Re: skraceni kurs ucenja picbasica

Postby pedja089 » 20-09-2016, 19:48

Meni deluje da bi trebalo da radi...
User avatar
pedja089
 
Posts: 7206
Joined: 20-02-2007, 14:50
Location: Sremska Mitrovica,Novi Sad - Srbija

Re: skraceni kurs ucenja picbasica

Postby alarmi ns » 21-09-2016, 09:03

Nazalost Pedja a.4 neradi, jedino ako cip nije zveknuo al neznam zasto bi, ili mu fali nesto
alarmi ns
 
Posts: 29
Joined: 29-06-2013, 20:13

Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 09-06-2017, 14:22

Zdravo dugari hteo bih da cujem vase predloge uvezi koriscenje tastera i eliminisanje treperenje kontakata (Debounce).
Ovaj kod resava treperenje kontakata ali nije najbolje resenje.

Code: Select all
taster1       var porta.4          ;definišemo alias za taster TA1
taster2       var porta.5          ;definišemo alias za taster TA2

 
    DEFINE OSC 4

inic:
    osccon=%01101000               ;interni oscilator na 4MHz
    ansela=0                       ;ceo port A digitalni
    anselb=0                       ;ceo port B digitalni
    latb=0                         ;isključimo sve LED
    trisa=255                      ;postavi ceo port A kao ulazni
    trisb=0                        ;postavi ceo port B kao izlazni
    wpua=%00100000                 ;uključi PULL-UP na RA5
    option_reg=%01111111           ;uključi globalno PULL-UP otpornike

    do                             ;početak petlje
cekaj0:
      if taster2=0 then latb=0     ;ako je TA2 pritisnut, isključi sve LED
      if taster1=1 then cekaj0     ;ako TA1 nije pritisnut idi na labelu 'cekaj0'
      pause 20                     ;sačekaj 20 ms
      if taster1=1 then cekaj0     ;ako TA1 nije pritisnut idi na labelu 'cekaj0'
      latb=latb + 1                ;uvećaj stanje LATB za 1
cekaj1:
      if taster1=0 then cekaj1     ;ako je TA1 još uvek pritisnut, idi na labelu 'cekaj1'
      pause 20                     ;sačekaj 20 ms
      if taster1=0 then cekaj1     ;ako je TA1 još uvek pritisnut, idi na labelu 'cekaj1'
    loop                           ;kraj petlje
     
end


Ovaj primer ima nekoliko mana a to je da program ne može da napreduje dalje dok se ne pritisne taster i vrlo je tesko napraviti neki kompleksniji program na ovaj način.

Druga mana je što se pravi pauza od 20 ms pri svakoj proveri tastera i za to vreme program jednostavno čeka, gubi dragoceno vreme, i ne može da radi ništa drugo.

Ovde dolazi do izražaja treća mana, a to je upravo pauza koja se pravi čim se detektuje da je taster pritisnut.
U slucaju da nam neka smetnja napravi laznu detekciju pritisnutog tastera program će krenuti u čekanje. Posto su smetnje ceso kratke i nakon pauze neće biti detektovan pritisak tastera tada smo bespotrebno izgubili vreme koje namm je mozda znacilo.

E sad mene interesuje koji su drugi nacini da se ove navedene mane prevazidju da bi program bio ekonomicniji i da moze raditi druge stvari a ne da gubi dragoceno vreme.

Pozz.
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Re: skraceni kurs ucenja picbasica

Postby pedja089 » 09-06-2017, 14:50

User avatar
pedja089
 
Posts: 7206
Joined: 20-02-2007, 14:50
Location: Sremska Mitrovica,Novi Sad - Srbija

Re: Re: skraceni kurs ucenja picbasica


Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 09-06-2017, 15:16

Znam da moze da se resi hardversi ali mene interesuje softversi kojim se najcesce primerom programeri sluze da bih to primenio i ja sada odmah na pocetku kada jos uvek savladavam programiranje.

Vidjao sam na puno uredjaja da postoji opcija kada se drzi taster uvecava se neki parametar a ukoliko se duze zadrzi taster onda krene brze da se uvecava.
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Re: skraceni kurs ucenja picbasica

Postby pedja089 » 09-06-2017, 15:31

Ja koristim hardverski. A to sto si napisao sada svako implementira na neki svoj nacin.
Recimo generisi interapt svakih x ms, i u interaptu proveravaj stanje tastera, ako se nije promenilo zadnjih X puta promeni stanje neke promenljive, ako se zadrzalo jos y puta povecaj neku promenljivu koja ce da ubrza.
User avatar
pedja089
 
Posts: 7206
Joined: 20-02-2007, 14:50
Location: Sremska Mitrovica,Novi Sad - Srbija

Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 09-06-2017, 16:43

Hvala Pedja to sa intrrupt-om ima smisla tu se uopste negubi na vremenu.
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 11-06-2017, 14:21

Kako nisam mogao nigde naci primer kako resiti debounce tastera na nacin koji je ekonomicniji juce sam seo i napisao algoritam po nekoj svojoj logici.

Moja zamisao je bila da ukoliko dodje do lazne detekcije ne gubim to vreme uzaludno. To sam resio tako sto ispitujem taster na svakih 1ms i to je vereme koje se moze izgubi prilikom lazne detekcije sto je puno manje od 10ms.
Zatim sam odradio podprogram tastera u kom imam prvih 6 prolaza sporije promene vrednosti nekog parametra a zatim krece brze sve dok se drzi taster nakon otpustanje tastera sledecim pritiskom krece ponovo sporije.

Prilazem taj deo koda cisto da cujem misljenje jos nekog da li je ovo ispravan nacin kada radimo sa tasterima a moze da posluzi jos nekom kao primer.

Code: Select all
Pocetak:

gosub LCD
 ;skeniranje tastera T1
 ;-----------------------------------------------
    If T1 = 0 then
        For CountByte = 0 to 9
           Pause 1
     If T1 = 1 then
Goto pocetak
  endif
   Next CountByte
gosub Uvecaj              ; podprogram obrada tastera
   B0 = 0

 endif
; skeniranje tastera T2
;------------------------------------------------   
    If T2 = 0 then
        For CountByte = 0 to 9
            Pause 1
     If T2 = 1 then
Goto pocetak
  endif
    Next CountByte
gosub Umanji                   ; podprogram obrade tastera
   B0 = 0
 
 endif

 pause 50
goto Pocetak

;----------------------------------------------------------           
Uvecaj:

Count = Count + 1
If Count >= 100 then
Count = 100
endif
gosub LCD
if B0 <= 5 then
B0 = B0 + 1
pause 900
Endif
Pause 100
if T1 = 0 then uvecaj

return

;------------------------------------------------------------
Umanji:

Count = Count - 1
if Count = 255 then
Count = 0
endif
gosub LCD
if B0 <= 5 then
B0 = B0 + 1
pause 900
Endif
Pause 100
if T2 = 0 then Umanji

return
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Re: skraceni kurs ucenja picbasica

Postby pedja089 » 12-06-2017, 08:55

Ne znam koju verziju PBP-a koristis, ali count je rezervisana rec, i sluzi za brojanje impulsa na pinu. Tako da bi to trebao definitivno izmeniti.
U programu ti je lose jer imas 1 promenljivu B0, pa ako se drza 2 tastera onda ce ti se prvi usporiti kada dodas drugi. U ovom slucaj kad je jedna promenljiva nije problem, ali ja bi dodao kad se drze ta 2 tastera da uopste ne ide u podprograme.
User avatar
pedja089
 
Posts: 7206
Joined: 20-02-2007, 14:50
Location: Sremska Mitrovica,Novi Sad - Srbija

Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 12-06-2017, 12:45

Pedja hvala na javljanju slazem se da nemoze promenljiva biti count mora drugacije da se nazove to sam i ja primetio jer je kompajler prijavio gresku koristim PBP 3.0.9 .

Za ovo ostalo se neslazem da je potrebno imati vise promenljivih dovoljno je samo B0 i CountByte a evo i zasto:
kada se stisne neki od tastera ili oba odjednom program kada naidje i detektuje neki od njih da je stisnut ostaje u petlji da uvecava countByte dok se ne ispuni uslov za skok na podprogram obradu tastera.
Kada ode u podprogram tu ostaje sve dok se drzi taster vrti se u petlji i uvecava promenljivu koju smo tamo naveli i B0 se uvecava samo do 5 zatim se preskace i tu smo ubrzali uvecavanje ostale promenljive u ovom primeru recimo Brojac koju smo izmenili u odnosu na prethodni kod za to vreme glavi program stoji.

Prvom prilikom kada otpustimo taster procesor se vraca u glavni program na liniju B0 =0 jer je tu stao kada je otisao na izvrsenje podprograma i tu lokacuju je upisao na stek naredbom Gosub tek tada se detektuje sledeci taster da je stisnut i onda se istim redosledom sve ponavlja kao u prethodnom slucaju.
Ovako mozemo imati vise tastera a samo jednu promenljivu B0 nadam se da sam bio jasam a upravo sam i isprobao to na razvojnom sistemu radi kako je opisano.

Ispravljen kod:

Code: Select all

Brojac var byte
CountByte var byte
 B0 var byte
Brojac = 0
B0 = 0


Pocetak:

gosub LCD
 ;skeniranje tastera T1
 ;-----------------------------------------------
    If T1 = 0 then
        For CountByte = 0 to 9
           Pause 1
     If T1 = 1 then
Goto pocetak
  endif
   Next CountByte
gosub Uvecaj              ; podprogram obrada tastera
   B0 = 0

 endif
; skeniranje tastera T2
;------------------------------------------------   
    If T2 = 0 then
        For CountByte = 0 to 9
            Pause 1
     If T2 = 1 then
Goto pocetak
  endif
    Next CountByte
gosub Umanji                   ; podprogram obrade tastera
   B0 = 0
 
 endif

 pause 50
goto Pocetak

;----------------------------------------------------------           
Uvecaj:

Brojac = Brojac + 1
If Brojac >= 100 then
Brojac = 100
endif
gosub LCD
if B0 <= 5 then
B0 = B0 + 1
pause 900
Endif
Pause 100
if T1 = 0 then Uvecaj

return

;------------------------------------------------------------
Umanji:

Brojac = Brojac - 1
if Brojac = 255 then
Brojac = 0
endif
gosub LCD
if B0 <= 5 then
B0 = B0 + 1
pause 900
Endif
Pause 100
if T2 = 0 then Umanji

return
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Re: skraceni kurs ucenja picbasica

Postby pedja089 » 12-06-2017, 16:02

Taj deo sam prevideo. Ja obicno izbegavam da bilo koji podprogram blokira izvrsenje glavnog programa.
Ali ti si to resio sa dodavanjem LCD prikaza u svakom pod programu.
User avatar
pedja089
 
Posts: 7206
Joined: 20-02-2007, 14:50
Location: Sremska Mitrovica,Novi Sad - Srbija

Re: skraceni kurs ucenja picbasica

Postby milan-markovic » 12-06-2017, 20:06

Svaki odlazak u podprogram blokira izvrsenje glavnog programa to je neizbezno e sad sve zavisi sta se radi u podprogramima i koliko se zadrzavamo.
U ovom slusaju imacemo istu zadrsku iako bi ovo sve stavili u glavi program osim ako pauze zamenimo nekim tajmerom onda je druga stvar.
Mislim da u vecini slucajeva prilikom unosnje nekih parametra tasterima nije ni bitno da ostatak programa mora da radi interapt u svakom trenutku nam radi ukoliko koristimo asemblerski jer ON interupt koji ima PBP neradi kako treba zato njega i ne koristim.

Pozz.
User avatar
milan-markovic
 
Posts: 31
Joined: 24-05-2014, 10:54
Location: Aleksinac

Previous

Return to Mikrokontroleri - PIC

Who is online

Users browsing this forum: No registered users and 2 guests

GOOGLE