 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Vajdo Član


Pridružen-a: Čet 23 Sep 2004 23:06 Prispevkov: 1088 Aktiv.: 4.59 Kraj: Ribnica
|
Objavljeno: Čet Mar 26, 2009 1:19 am Naslov sporočila: utripanje ledice - začetnik |
|
|
Naredil sem si program, po katerem, naj bi utripala ledica na izhodu. Problem se pojavi ker mi zadeva naredi utrip 1 in utrip 2, nato pa se zadeva ustavi. Ledica bi morala utripati nekako tako. bip bip bip bipbipbipbip (3x po sekundo z sekundnimi presledki in pa 3x po pol sekunde z pol sekundnimi presledki. Kaj delam narobe?
Koda: |
$regfile = "2313def.dat"
$crystal = 1000000
Config Pinb.4 = Input 'Definicija vhodov/izhodov
Config Pinb.3 = Output
'Glavna zanka
Do
If Pinb.4 = 1 Then 'preverjanje vhoda
Waitms 50
If Pinb.4 = 1 Then
Wait 1 'utrip 1
Set Pinb.3
Wait 1
Reset Pinb.3
Wait 1 'utrip 2
Set Pinb.3
Wait 1
Reset Pinb.3
Wait 1
Set Pinb.3 'utrip 3
Wait 1
Reset Pinb.3
Wait 1
Set Pinb.3 'utrip 4
Waitms 250
Waitms 250
Reset Pinb.3
Waitms 250
Waitms 250
Set Pinb.3 'utrip 5
Waitms 250
Waitms 250
Reset Pinb.3
Waitms 250
Waitms 250
Set Pinb.3 'utrip 6
Waitms 250
Waitms 250
Reset Pinb.3
End If
End If
Loop |
_________________ Lep pozdrav, Primož |
|
Nazaj na vrh |
|
 |
poule Član

Pridružen-a: Čet 11 Jan 2007 19:53 Prispevkov: 813 Aktiv.: 3.62 Kraj: Ljubljana
|
Objavljeno: Čet Mar 26, 2009 8:17 am Naslov sporočila: |
|
|
A brez tistih treh vrstic preverjanj vhoda ti utripanje deluje? |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Čet Mar 26, 2009 5:34 pm Naslov sporočila: |
|
|
Prva napaka:
Koda: |
Config Pinb.4 = Input 'Definicija vhodov/izhodov
Config Pinb.3 = Output |
Če je nek port vhod, potem ga v programu definiramo in uporabljamo kot PINx.y, naprimer Config PINB.1 = Input, If PINB.1 = 0. Na port, definiran kot PIN, ti ne moreš pisati (PINB.1 = 1), ker je vhod in ne izhod.
Če je nek port izhod, potem ga v programu definiramo in uporabljamo kot PORTx.y, naprimer Config PORTB.2 = Output, PORTB.2 = 1. Portu, ki je definiran kot PORT, ne moreš brati stanja (If PORTB.2 = 0), ker je izhod in ne vhod.
Drugič - nasvet:
Vsak Bascom-AVR (novejši od verzije 10, ti imaš verjetno 11.xxxx...) ima v sebi, v prevajalniku "vgrajeno skripto", ki ti Wait ukaze razbije na ustrezno manjše, v obsegu Byta, torej lahko ti:
Waitms 250
Waitms 250
Brez skrbi spremeniš tudi v:
Waitms 500
Sam včasih uporabljam tudi naprimer Waitms 1120, ko potrebujem malo več kot sekundo, pa deluje brez problema.
Tretjič - nasvet:
Bascom ima uporabniku prijazno funkcijo oz. ukaz, to je ukaz Alias. Sicer ni kako vem pomemben, vendar ti olajša pisanje in razumevanje programa. Torej:
Tipka Alias PINB.4
Led Alias PORTB.3
Zdaj lahko v programu namesto PINx.y in PORTx.y uporabljaš kar svoja imena, paziti moraš samo, da nimaš definirane še kake spremenljivke z istim imenom.
Še en nasvet:
Včasih je dobro - vsaj meni je boljše - če imam glavno zanko kratko in večinoma delam v podrutinah. Saj ne, da bi program potem deloval veliko boljše, le bolj pregleden je.
Pripis: V programiranju v Bascom-AVR, moraš na konec programa vedno dodati ukaz END.
In če uporabima vse te moje predloge, bi dobila tako kodo:
Koda: |
'Čip:
$regfile = "2313def.dat"
$crystal = 1000000
'Konfiguracija vhodov in izhodov:
Config Pinb.4 = Input 'Vhod
Config Portb.3 = Output 'Izhod
'Aliasi
Tipka Alias Pinb.4
Led Alias Portb.3
'Glavni program:
Led = 0 'Ugasnema LED, če slučajno gori.
PORTB.4 = 1 'Tipko naslovina s portom in jo tako probama malo nagniti na 1, če slučajno pade na 0. ;)
Do
If Tipka = 0 Then 'Preverjanje vhoda - -tipko veži med Pinb.4 in GND, ne med pin in VCC, je boljše.
Waitms 25 '15-30 je čisto dovolj
If Tipka = 0 Then
Gosub Utripanje 'Gremo v podrutino Utripanje
End If
End If
Loop
Utripanje: 'Podrutina utripanje
Wait 1
Led = 1 'Utrip 1
Wait 1
Led = 0
Wait 1
Led = 1 'Utrip 2
Wait 1
Led = 0
Wait 1
Led = 1 'Utrip 3
Wait 1
Led = 0
Wait 1
Led = 1 'Utrip 4
Waitms 500
Led = 0
Waitms 500
Led = 1 'Utrip 5
Waitms 500
Led = 0
Waitms 500
Led = 1 'Utrip 6
Waitms 500
Led = 0
Return 'Vrneva se tja, od koder sva prišla (v glavno zanko)
End |
Kodo probaj in povej, če kaj ne bo delovalo. To sem spisal na pamet brez Bascoma, zato je lahko kaka napakica. Če bo še kaj narobe, povej, rad pomagam. Lahko me dodaš tudi na MSN, če bojo še kaka nerazumevanja. _________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
 |
Vajdo Član


Pridružen-a: Čet 23 Sep 2004 23:06 Prispevkov: 1088 Aktiv.: 4.59 Kraj: Ribnica
|
Objavljeno: Čet Mar 26, 2009 8:47 pm Naslov sporočila: |
|
|
že sprobavam. No, kakšna takšna razlaga mi je manjkala. No ja, vsak začetek je težak. Zato pa obstaja elektronik.si. Hvala. _________________ Lep pozdrav, Primož |
|
Nazaj na vrh |
|
 |
program_er Član


Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 10.33 Kraj: Maribor (Pohorje)
|
Objavljeno: Čet Mar 26, 2009 9:31 pm Naslov sporočila: |
|
|
Vajdo je napisal/a: |
No ja, vsak začetek je težak. Zato pa obstaja elektronik.si. Hvala. |
No, na dobri poti si. tudi jaz sem tako začel in z vprašanji polnil teme o programiraju (saj jih še zdaj ) Brez vse pomoči tega foruma ti nebi mogel napisati skoraj nič od zgoraj.
Drugače pa obstaja že nekaj tem, v katerih je bilo obdelano programiranje:
Štetje s tipko
Ena glavnih tem o programiranju (veliko o ADCju in LCDju)
Ko boš dobro naštudiral tipke, vhode in izhode ter spremenljivke, se spusti še na RS232 komuniciranje in LCD. Ko še boš to bolj ali manj obvladal, se spravi na timerje (nekaj, kar meni ne gre v glavo) ter kakšne PWM modulacije, potem kake grafične prikazovalnike...
Če pa ti bilo kaj ni jasno, samo reči.  _________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
Nazadnje urejal/a program_er Pet Mar 27, 2009 11:18 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
Vajdo Član


Pridružen-a: Čet 23 Sep 2004 23:06 Prispevkov: 1088 Aktiv.: 4.59 Kraj: Ribnica
|
Objavljeno: Pet Mar 27, 2009 12:34 am Naslov sporočila: |
|
|
No evo zadeva špila, vzporedno sem dodal da se prižiga še semafor in ventil, ter kontra ventil. V programu sem moral spremeniti Config Portb.3 = Output v pinb.3, ker mi je javljal napako. Seveda mi je nekaj stvari razložil tudi bolha95. Hvala tudi njemu. Lcd-je pa že malo poznam, saj sem se prvo z njimi igral. No ja, poznam ji toliko, da lahko sam sebi pošljem vabilo na  _________________ Lep pozdrav, Primož |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|