Semafor za utrke

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

Moderators: pedja089, stojke369, [eDo], trax

19882310
Posts: 24
Joined: 25-06-2008, 20:55

Semafor za utrke

Post by 19882310 »

Postovani clanovi,molio bih Vas pomoc oko jednog projekta.

Nemam pojma kako to isprogramirati,pa ako mi moze neko od Vas pomoc.

Naime,radi se o semaforu za utrke. Sastoji se od 5 zarulja. 4 crvene i 1 zelene,a sistem i nacin rada bi isao ovako.

Semafor treba da ima 4 opcije.

1.opcija
odbrojavanje 15 sec
11.sec-pali se 1. crvena lampica
12.sec-pali se 2. crvena lampica
13.sec-pali se 3. crvena lampica
14.sec-pali se 4. crvena lampica
15.sec-pali se 5. zelena lampica, a gase se sve 4 crvene lampice

2.opcija
odbrojavanje 30 sec
26.sec-pali se 1. crvena lampica
27.sec-pali se 2. crvena lampica
28.sec-pali se 3. crvena lampica
29.sec-pali se 4. crvena lampica
30.sec-pali se 5. zelena lampica, a gase se sve 4 crvene lampice

3.opcija
odbrojavanje 45 sec
41.sec-pali se 1. crvena lampica
42.sec-pali se 2. crvena lampica
43.sec-pali se 3. crvena lampica
44.sec-pali se 4. crvena lampica
45.sec-pali se 5. zelena lampica, a gase se sve 4 crvene lampice

4.opcija
odbrojavanje 60 sec
56.sec-pali se 1. crvena lampica
57.sec-pali se 2. crvena lampica
58.sec-pali se 3. crvena lampica
59.sec-pali se 4. crvena lampica
60.sec-pali se 5. zelena lampica, a gase se sve 4 crvene lampice


Eto ovako bi to trebali izgledat. Nakon kad se upale sve 4 crvene lampice,one se gase i pali se zelena. Ta zelena bi trebala svijetliti kod intervala 15se -5sekundi, a kod svih drugih intervala bi trebala svijetlit 10 sec.

Ciklusi bi se trebali odabirati pomoću 4 prekidača ili tipkala koja kad bi se pretisnula bi startala odbrojavanja od nule i počela odbrojavanje koje bi se odabralo. Ciklus bi se trebao ponavljati sve dok je semafor uključen.

Mislim da bi bilo dobro ovako:

prekidač on/ off---- zatim da se odabere 1 od opcija te se upali led dioda pokraj tipkala---i kad se pritisne tipkalo count da počinje odbrojavanje i vrti se ciklus.

Znači hardware je- 4 tipkala sa ledicama pokraj za signalizaciju, prekidac on/off i tipkalo count.


Molim Vas ako mi mozete pomoci, napisati kod za pic 16f877 i skicirati shemu za to smontirati. Izlazi bi okidali neke lampe,pa sad neznam ako bi bilo dobro tu postaviti neki trijak,ali ja sam pocetnik koji zna samo polemiti to i zamisliti,a to osmisliti da radi je problem.
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Semafor za utrke

Post by WhiteHead »

Napiši odakle si da ti se javi neko iz blizine...
Ako kaniš pobijediti, ne smiješ izgubiti
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Rijeka, Hrvatska
User avatar
informaticar
Odlično uznapredovao
Odlično uznapredovao
Posts: 588
Joined: 09-12-2008, 16:31
Location: Velika Kopanica - Slavonski Brod

Re: Semafor za utrke

Post by informaticar »

Za početak pogledaj peđin picbasic kurs probaj sastaviti dio programa pa pitaj ono što ti nije jasno...
User avatar
LIAM
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 379
Joined: 27-06-2008, 14:52
Location: Rijeka - Hrvatska

Re: Semafor za utrke

Post by LIAM »

Pozdrav
Elektor je pravio nesto slicno mislim da je cak i u projektima pa malo povledaj
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Koliko sam vidio on je radio semafor za kosarku...neznam koliko to ima povezanosti

pokusat cu sam poceti...
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Evo ovako

ja sam poceo i napravio sam dio koda

zezaju me uvjeti else if,nemogu da ih poslozim
vremena pause nisu definirana dok ne slozim uvjete.

Code: Select all

SYMBOL LED1=PORTB.7
    SYMBOL LED2=PORTB.6
    SYMBOL LED3=PORTB.5
    SYMBOL LED4=PORTB.4
    SYMBOL LED5=PORTB.3
    
    
    
    SYMBOL TASTER15=PORTA.0      ' taster T15 za odabir 15 sec
    SYMBOL TASTER30=PORTA.1      ' taster T30 za odabir 30 sec
    SYMBOL TASTER45=PORTA.2      ' taster T45 za odabir 45 sec
    SYMBOL TASTER60=PORTA.3      ' taster T60 za odabir 1min
    
    OUTPUT  LED1      ' portb7 izlazni
    OUTPUT  LED2      ' portb6 izlazni
    OUTPUT  LED3      ' portb5 izlazni
    OUTPUT  LED4      ' portb4 izlazni
    OUTPUT  LED5      ' portb3 izlazni
   
    
  
    INPUT TASTER15    ' porta1 ulazni
    INPUT TASTER30    ' porta2 ulazni
    INPUT TASTER45    ' porta3 ulazni
    INPUT TASTER60    ' porta4 ulazni

    
    
pocetak:
     LOW LED1
     LOW LED2
     LOW LED3
     LOW LED4
     Low LED5
     
     
 if TASTER15=0 Then
 
       PAUSE 1000
       High LED1
       PAUSE 1000
       High LED2
       PAUSE 1000
       High LED3
       PAUSE 1000
       High LED4
       PAUSE 1000
       HIGH LED5
       LOW LED1
       LOW LED2
       LOW LED3
       LOW LED4
       PAUSE 5000
      
 ELse if TASTER30=0 Then
 
       PAUSE 1000
       High LED1
       PAUSE 1000
       High LED2
       PAUSE 1000
       High LED3
       PAUSE 1000
       High LED4
       PAUSE 1000
       HIGH LED5
       LOW LED1
       LOW LED2
       LOW LED3
       LOW LED4
       PAUSE 10000
       
 ELse if TASTER45=0 Then
 
       PAUSE 1000
       High LED1
       PAUSE 1000
       High LED2
       PAUSE 1000
       High LED3
       PAUSE 1000
       High LED4
       PAUSE 1000
       HIGH LED5
       LOW LED1
       LOW LED2
       LOW LED3
       LOW LED4
       PAUSE 10000
       
 ELse if TASTER60=0 Then
 
       PAUSE 1000
       High LED1
       PAUSE 1000
       High LED2
       PAUSE 1000
       High LED3
       PAUSE 1000
       High LED4
       PAUSE 1000
       HIGH LED5
       LOW LED1
       LOW LED2
       LOW LED3
       LOW LED4
       PAUSE 10000
 ENDIF
       GOTO pocetak
       End
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Pomagajte...

i kada bi imao samo jedan dio koda npr za 15min vrtilo bi se odbrojavanje iako taster 15 nije pritisnut (port na nuli)

zasto???
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Da pojasnim...

sastavim isti kod ali samo sa jednim if uvjetom

npr if taster15=0 then

...

end if

goto pocetak


Kad simuliram u proteusu desi se da se naredbe unutar uvjeta vrte neovisno o tome da li je taster15 na nuli ili na jedinici.

Pitanje glasi: zasto?
User avatar
WhiteHead
Pravi forumaš
Pravi forumaš
Posts: 1627
Joined: 28-06-2007, 18:36
Location: 75,35k; B&H

Re: Semafor za utrke

Post by WhiteHead »

Zavisi šta je između IF i ENDIF.
I tu može biti neka beskonačna petlja koja zadrži program unutra...znači ukoliko je uslov od IF ispunjen ide se na izvršavanje koda sve do ENDIF i tek nakon toga se ponovo provjerava uslov IF...

Ovaj kod:

Code: Select all

Pocetak:
if TASTER15=0 Then
PAUSE 1000
High LED1
PAUSE 1000
High LED2
PAUSE 1000
High LED3
PAUSE 1000
High LED4
PAUSE 1000
HIGH LED5
LOW LED1
LOW LED2
LOW LED3
LOW LED4
PAUSE 5000
endif
goto Pocetak
Mora funkcionisati u tom smislu...
Ako kaniš pobijediti, ne smiješ izgubiti
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

nazalost to ne funkcionira,

jer mi se izvrsavaju naredbe neovisno o tome da li je ulaz nula ili nije
krkojlo
Pocetnik na forumu
Pocetnik na forumu
Posts: 46
Joined: 11-03-2012, 16:20

Re: Semafor za utrke

Post by krkojlo »

probaj ovo ubaciti odmah prije labele

Code: Select all

        OPTION_REG.7 = 0
        
        pocetak:
....
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Probao sam sve moguce i nista.

Jedino je profunkcioniralo kada sam sve simbole zamjenio sa portovima-dakle nema LED,TASTER nego PORTB.7 itd. I tako jedino radi.
I jedino radi uvjet if kada stavim PORTB.1 kao input. Dok na PORTA ne radi,nego se ponavlja greska od prije-vrti odbrojavanje bez da je zadovoljen uvjet IF.

Eto programa ispod. Ono sta radi je normalno napisano,a ono sta bih volio da bude,i trenutno ne radi je komentirano sa znakom '

Ovo sto je krknjo rekao radi ali samo kada nemam definirane SYMBOL elemente i kada se radi sa portom B



__________

Code: Select all

'SYMBOL PREKIDAC15=PORTA.0
    'SYMBOL PREKIDAC30=PORTB.1
    'SYMBOL PREKIDAC45=PORTA.2
    'SYMBOL PREKIDAC60=PORTA.3
    
    'SYMBOL CRVENA1=PORTB.7
    'SYMBOL CRVENA2=PORTB.6
    'SYMBOL CRVENA3=PORTB.5
    'SYMBOL CRVENA4=PORTB.4
    'SYMBOL ZELENA=PORTB.3
    
    'INPUT PREKIDAC15
    'INPUT PREKIDAC30
    'INPUT PREKIDAC45
    'INPUT PREKIDAC60
    
    'OUTPUT PORTB.7     
    'OUTPUT PORTB.6      
    'OUTPUT PORTB.5
    'OUTPUT PORTB.4
    'OUTPUT PORTB.3
            
    'CRVENA1=0
    'CRVENA2=0
    'CRVENA3=0
    'CRVENA4=0
    'ZELENA=0
    
    INPUT PORTB.1
    
    OUTPUT PORTB.7
    OUTPUT PORTB.6
    OUTPUT PORTB.5
    OUTPUT PORTB.4
    OUTPUT PORTB.3
    
    PORTB.7=0
    PORTB.6=0
    PORTB.5=0
    PORTB.4=0
    
    OPTION_REG.7 = 0

pocetak:
        IF PORTB.1=0 THEN
        'if PREKIDAC30=0 THEN
    
        PAUSE 1000
        LOW PORTB.3
        'LOW ZELENA
        PAUSE 1600
        HIGH PORTB.7 
        'HIGH CRVENA1
        PAUSE 100
        HIGH PORTB.6
        'HIGH CRVENA2
        PAUSE 100
        HIGH PORTB.5
        'HIGH CRVENA3
        PAUSE 100
        HIGH PORTB.4
        'HIGH CRVENA4
        PAUSE 100
    
        LOW PORTB.7
        LOW PORTB.6
        LOW PORTB.5
        LOW PORTB.4
        HIGH PORTB.3

        'HIGH ZELENA
    
    ELSE
         LOW PORTB.7
        LOW PORTB.6
        LOW PORTB.5
        LOW PORTB.4
        LOW PORTB.3

        'LOW CRVENA1
        'LOW CRVENA2
        'LOW CRVENA3
        'LOW CRVENA4
        'LOW ZELENA
        
  ENDIF
        
goto pocetak
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Evo ljudi,ja naporavio svoj prvi projekt. Mucio sam se i mucio,ali eto ga. Znam da nije bas nesto,ali mislim da je ok. Neznam zasto nisam uspio postaviti tastere da idu preko portA. Molio bih Vas ako znate kako taj kod malo sažeti,i kako to unaprijediti.


p.s. oprostite na prijasnjim postovima u kojima nisam uspio kod staviti u ovakav preglednik. Novi sam ovdje pa i to ucim.

Code: Select all

    '****************************************************************
'*  Name    : PROBA3060.BAS                                      *
'*  Author  : MARKO                  *
'*  Notice  : Copyright (c) 2012  *
'*          : All Rights Reserved                               *
'*  Date    : 12.5.2012.                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
   
SYMBOL PREKIDAC15=PORTB.0
SYMBOL PREKIDAC30=PORTB.1
SYMBOL PREKIDAC45=PORTA.0
SYMBOL PREKIDAC60=PORTB.2


SYMBOL CRVENA1=PORTB.7
SYMBOL CRVENA2=PORTB.6
SYMBOL CRVENA3=PORTB.5
SYMBOL CRVENA4=PORTB.4
SYMBOL ZELENA=PORTB.3

INPUT PREKIDAC15
INPUT PREKIDAC30
INPUT PREKIDAC45
INPUT PREKIDAC60



CRVENA1=0
CRVENA2=0
CRVENA3=0
CRVENA4=0
ZELENA=0

OPTION_REG.7 = 0

pocetak:
    
    
    SEC15:
    

        if PREKIDAC15=0 THEN
        
        
            PAUSE 5000
            LOW ZELENA            
            PAUSE 6000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            HIGH ZELENA
            
            GOTO SEC15
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW ZELENA
            
            GOTO SEC30
        
        ENDIF
    
            
    SEC30:
    
        if PREKIDAC30=0 THEN
        
        
            PAUSE 10000
            LOW ZELENA            
            PAUSE 16000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4            
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            HIGH ZELENA
            
            GOTO SEC30
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW ZELENA
            
        GOTO SEC45
        
        ENDIF
    
    
    SEC45:    
    
        if PREKIDAC45=0 THEN
        
            PAUSE 10000
            LOW ZELENA            
            PAUSE 31000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4            
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            HIGH ZELENA
            
            GOTO SEC45
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW ZELENA
    
        goto sec60
        ENDIF
        
        
    OPTION_REG.7 = 0
    SEC60:    
        
        if PREKIDAC60=0 THEN
        
            PAUSE 10000
            LOW ZELENA            
            PAUSE 46000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4            
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            HIGH ZELENA
            
            GOTO SEC60
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW ZELENA
    
        ENDIF


goto pocetak
krkojlo
Pocetnik na forumu
Pocetnik na forumu
Posts: 46
Joined: 11-03-2012, 16:20

Re: Semafor za utrke

Post by krkojlo »

zato sto ovo:

OPTION_REG.7 = 0

radi samo na PORTB
OPTION REGISTAR(OPTION_REG) nas konkretno zanima sedmi bit ovog registra. sedmi bit upravlja pulluup-om na portub.
stoga ako nam je potreban pull up na nekom ulaznom pinu umesto da ubacujemo otpornik dovoljno je samo postaviti sedmi bit option_reg na nulu. i imacemu pull up na svim ulaznim pinovima na portub. to je moguce uraditi na dva nacina
prvi OPTION_REG.7=0, ovako pristupamo samo sedmom bitu i postavljamo ga na nulu.
drugi nacin LOW OPTION_REG.7 ovde koristimo naredbu LOW koja postavlja vrednost na nulu.
i ja sam pocetnik i kuburio sam sa slicnom situacijom, nadam se da ti je sad malo jasnije.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Semafor za utrke

Post by pedja089 »

To je ok sto si napravio. Ne znam koji kontroler koristis, ali vecina njih ima neki analogni deo na portA koji treba da iskljucis, i prebacis pinove u digitalne.
Isto tako, koristio si pull up na portB(option_reg.7). Pretpostavljam da na portu A nisi imao nikakve pull up otpornike. A to onda bez njih ne moze da radi. Malo detaljnije procitaj kurs, naces tamo objasnjeno.
Edit:
krkojlo je bio malo brzi.
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Sta se tice pullup otpornika,ja sam ih stavio. Znaci stavio sam na ulaz napajanje 5v,zatim 4k7 otpornik i na ulaz. A između otpornika i ulaza sam nakacio spoj sa tastera koji sa druge strane ima ground. Eto slike ispod:

Koristim PIC16f877

Sada bi jos trebao staviti i neki zvučni signal u trajanju oko 0.5sec po paljenju ledice. Kako to izvesti ako moze pomoc.

Kod sam napisao novi jer sad cu raditi sa 6 lampi i samo odabir 30 i 60 sec. Eto da olaksam.

Code: Select all

    '****************************************************************
'*  Name    : PROBA3060.BAS                                      *
'*  Author  : MARKO                  *
'*  Notice  : Copyright (c) 2012  *
'*          : All Rights Reserved                               *
'*  Date    : 12.5.2012.                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
   

SYMBOL PREKIDAC30=PORTB.6
SYMBOL PREKIDAC60=PORTB.7


SYMBOL CRVENA1=PORTB.5
SYMBOL CRVENA2=PORTB.4
SYMBOL CRVENA3=PORTB.3
SYMBOL CRVENA4=PORTB.2
symbol CRVENA5=PORTB.1
SYMBOL ZELENA=PORTB.0


INPUT PREKIDAC30
INPUT PREKIDAC60

OUTPUT CRVENA1
OUTPUT CRVENA2
OUTPUT CRVENA3
OUTPUT CRVENA4
OUTPUT CRVENA5
OUTPUT ZELENA


CRVENA1=0
CRVENA2=0
CRVENA3=0
CRVENA4=0
CRVENA5=0
ZELENA=0

OPTION_REG.7 = 0

pocetak:
    
               
    SEC30:
    
        if PREKIDAC30=0 THEN
        
            pause 15000           
            LOW ZELENA            
            PAUSE 10000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4            
            PAUSE 1000
            HIGH CRVENA5
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW CRVENA5
            HIGH ZELENA
                        
            GOTO sec30
            
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW CRVENA5
            LOW ZELENA
            
            
        
        ENDIF

    SEC60:
    
        if PREKIDAC60=0 THEN
        
        
            PAUSE 15000
            LOW ZELENA            
            PAUSE 15000
            HIGH CRVENA1            
            PAUSE 1000
            HIGH CRVENA2            
            PAUSE 1000
            HIGH CRVENA3            
            PAUSE 1000
            HIGH CRVENA4            
            PAUSE 1000
            HIGH CRVENA5
            PAUSE 1000
            low CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW CRVENA5
            HIGH ZELENA
            
            GOTO SEC60  
    
        ELSE
    
            LOW CRVENA1
            LOW CRVENA2
            LOW CRVENA3
            LOW CRVENA4
            LOW CRVENA5
            LOW ZELENA
            
                  
        ENDIF
        
  GOTO POCETAK
  
  END
   
Slika:
http://imageshack.us/photo/my-images/535/shemav.jpg/
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: Semafor za utrke

Post by pedja089 »

Moras u ADCON1 odabrati da su ti pinovi digitalni... Prelistaj datasheet i sekciju sa AD konverotorom, naces tablicu...
Ako me pamcenje dobro sluzi treba da bude ADCON1=15
ili druga opcija
http://www.picbasic.co.uk/forum/showthread.php?t=11100
A zvuk freqout, sound itd...
Prelistaj spisak komandi, ako je link jos dobar na kursu...
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Eh ako cu ja ovo uspjet pohvatat oko ADCON1

Sta se tice zvuka,mislim da bi bilo najjednostavnije staviti izlaz kao impuls i okinut trijak koji bi opalio neku sirenu ili zvucni signal.

Molim Vas sad pomoc kako na ovoj mojoj shemi da si nacrtam izlaze sa tranzistorima,trijcima i svime, te kako spojiti vanjske lampe i sirenu.

Hvala
19882310
Posts: 24
Joined: 25-06-2008, 20:55

Re: Semafor za utrke

Post by 19882310 »

Jel bi bilo ovako u redu da napravim???

jesu ovo komponente koje se koriste i ima ih za nabaviti?

mislim prvenstveno na ULN2003?
radilo bi sve na 12v

evo shema ispod

http://img705.imageshack.us/img705/1879/shema2.jpg
Post Reply