mikroBasic úprava programu-kde dělám chybu?

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

mikroBasic úprava programu-kde dělám chybu?

#1 Příspěvek od hafca »

Zkoušel jsem si upravit zdroják pro hodiny v Basicu. Chtěl jsem si mimo jiné udělat signalizaci po čtvrt hodině, ale nedaří se mi. Ve For To Next mi program nedopočítá do 4, ale jen do 2. Zkoušel jsem ještě jiné počítání, odskoky přes Goto, ale to taky nejde. Začínám mít pocit, že to program prostě nestihne.
Nenašla by se tu nějaká dobrá duše, co by mě popostrčila nebo mi řekla, že to opravdu nejde?

If Minute = 00 Or Minute = 15 Or Minute = 30 Or Minute = 45 Or Test = AAN Then GongSignal
EndIf
.
.
.
GongSignal:
If LDR = On Then ;If there is daylight or the shadedlamps are switched on, then...
Low Volume ;...Volumepin low = Volume from gong louder...
Else ;...else (is it dark in the living-room)...
Input Volume ;...Volumepin 3-state = Volume from gong softly
EndIf

DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45

SecondPulse = On
DelayMS 50
Gong1 = OFF
Gong2 = OFF
SecondPulse = OFF
DelayMS 330 ;985 - 500 - 155
Inc Second

; When using the method underneath (with time instead of LDR), then erase the LDR syntax part above
; IF Hour > 5 THEN ;Between 0:30 and 6:30 is the gong volume not loud
; LOW Volume ;Volumepin low = Volume louder
; ELSE
; INPUT Volume ;Volumepin 3-state = Volume softly
; ENDIF
GoTo Further
.
.
.
zvon00:
For go=0 To 4
Gong1 = On
DelayMS 700
Next
Return

zvon15:
Gong1 = On
Return

zvon30:
For go = 0 To 2
Gong1 = On
DelayMS 700
Next
Return

zvon45:
For go = 0 To 3
Gong1 = On
DelayMS 700
Next
Return
.
.
.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
ivanko18
Příspěvky: 126
Registrován: 31 kvě 2009, 00:00
Bydliště: Povazie,SK

#2 Příspěvek od ivanko18 »

ako mas definovane DIM pre go ?
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#3 Příspěvek od hafca »

Opsal jsem to podle jiných deklarací v programu.

Kód: Vybrat vše

Dim go As Byte
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
ivanko18
Příspěvky: 126
Registrován: 31 kvě 2009, 00:00
Bydliště: Povazie,SK

#4 Příspěvek od ivanko18 »

If Minute = 00 Or Minute = 15 Or Minute = 30 Or Minute = 45 Or Test = AAN Then GongSignal

problem bude asi tu
skus to rozpisat
If Minute = 00 Or Test = AAN Then GongSignal
If Minute = 15 Or Test = AAN Then GongSignal
If Minute = 30 Or Test = AAN Then GongSignal
If Minute = 45 Or Test = AAN Then GongSignal

ps:s PIC nepracujem a picbasic nepoznam
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#5 Příspěvek od hafca »

Tahle část funguje, program zavolá podprogramy správně. Nejde to počítání.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
ivanko18
Příspěvky: 126
Registrován: 31 kvě 2009, 00:00
Bydliště: Povazie,SK

#6 Příspěvek od ivanko18 »

DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45


nechyba ukoncenie

DelayMS 155
If Minute = 00 Then GoSub zvon00
If Minute = 15 Then GoSub zvon15
If Minute = 30 Then GoSub zvon30
If Minute = 45 Then GoSub zvon45
EndIf


alebo takto

DelayMS 155
If Minute = 00 Then GoSub zvon00
EndIf
If Minute = 15 Then GoSub zvon15
EndIf
If Minute = 30 Then GoSub zvon30
EndIf
If Minute = 45 Then GoSub zvon45
EndIf
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#7 Příspěvek od hafca »

To jsem tam zkoušel, ale překladač hází při kompilaci chybu.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Uživatelský avatar
ivanko18
Příspěvky: 126
Registrován: 31 kvě 2009, 00:00
Bydliště: Povazie,SK

#8 Příspěvek od ivanko18 »

tak potom neviem....
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#9 Příspěvek od Andrea »

Jak víš, že ti to napočítá jen do 2? A nemáš ty počty nějaké divné? Při 15 nemáš nic, při 30 máš 2100 ms, při 45 máš 2800 ms a při 00 máš 3500 ms. A neutečou ti tři sekundy, když se tam šmrdláš 3,5 sekundy v podprogramu?
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#10 Příspěvek od hafca »

Jak to vím? Spouští to pípák z SA0800 a ten by měl podle mého přání pípnout při 15 minátách 1x, při 30 2x, při 45 3x a při celé 4x. Taková byla moje idea, ale zatím mi pípne max. 2x, bez ohledu na to, kolik minut je. Správně pípá jen ve 1/4 a v 1/2. Měl jsem za to, že se spustí podprogram, pošle impuls na PORTA.2, zazní tón a aby stačil zaznít je tam to čekání, smyčka začne znovu atd.. Při 1/4 stačí jen ten jeden impuls a to čekání je o kousek níž. Teď vidím, že mi tam vypadla jedna 0, ale na to počítání vliv nemá.
Myslel jsem si, že při splněné podmínce zavolám podprogram, ten proběhne, vrátí se odkud byl zavolán a všechno pokračuje dál.
Asi to tady bude o něco složitější než když jsem kdysi psal programy v Basicu pro Atari. Navíc jsem toho z Basicu od té doby dost zapoměl, tedy spíš skoro všechno. :cry: Proto tady loudím moudra. :wink:
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#11 Příspěvek od Andrea »

Podle mě příkaz Gong1 = On neposílá žádný impuls, ale nastaví ho na 1 a tam zůstane, dokud ho někde jinde nedáš do 0 a to děláš až po návratu ze zvonXX, takže ti ten pípák bude celou tu dobu zpoždění kontinuálně pískat, žádné přerušování.
Mimochodem, celej ten program je pěkně hnusnej.
Uživatelský avatar
hafca
Příspěvky: 4722
Registrován: 27 črc 2004, 00:00
Bydliště: 25km na západ od Prahy

#12 Příspěvek od hafca »

Já to nepsal, jen našel a posoudit to moc nedokážu. Mě se na tom líbilo to DCF a možnost úpravy v tom zdrojáku. To jsem ale netušil, že to bude takovej oříšek.
S tou 1 máš pravdu. Ten pípák když vyndám PIC a na vývod od PORTA.2 přivedu + pípá nepřetržitě. Budu to tedy v každém cyklu muset shodit na 0 tím Gong Off, jestli se nepletu.

Děkuji za nakopnutí a přeji dobrou noc.
Kdyby Edison nevynalezl elektřinu, do teď se díváme na televizi při svíčkách.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“