BASCOM tlacitko1

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

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#16 Příspěvek od ZdenekHQ »

Crifodo píše:já nejsem žádnej odborník v programování, na to jsou tu jiní, pokud se zrovna nevěnujou vznešenější činnosti.
ale myslím že bascom si nedá vnutit přiřazování aliasů za běhu programu, protože alias je vlastně deklarace a ta se definuje předem.
jednotlivý pin portu může mít jen hodnotu 0 nebo 1 tak snad bit jako typ proměnné je tam OK? Mně to v simulaci tak funguje.


Normálně jsi mě právě vyrazil dech.... Ono je tady sice skutečně hromada "programátorů", ale že je takto nakopne "starý šedý vlk" jsem nečekal...
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#17 Příspěvek od michalino »

Tak ještě Vás musím poprosit o pomoc, nefunguje mi to...
když to přesunu normálně do čipu, tak to nejede..

bity jsou pořád nastavené na 1 a když stisknu tlačítko, nezmění se na 0..

Prosím, čím to může být?

Přitom normálním aliasem, bez použití bitů tlačítka v pohodě fungují....



Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Left Alias Pina.7
Right Alias Pind.7

Levetlacitko = Left
Pravetlacitko = Right

Do
If Pravetlacitko = 0 Then
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
End If

If Levetlacitko = 0 Then
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
End If

Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko

Loop

a na displeji je pořád na třetím řádku : 1 1


prosím Vás o radu
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#18 Příspěvek od popopepe »

Michalino, i když to takhle rozběháš, budeš za chviličku řešit co se zákmity tlačítek.
Já bych to raději upravil takhle:

Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Left Alias Pina.7
Right Alias Pind.7

Levetlacitko = Left
Pravetlacitko = Right

start_1:
Do
debounce pravetlacitko,0,prava
debounce levetlacitko,0,leva
loop

prava:
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko
goto start_1


leva:
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko
goto start_1


Pomocí debounce otestuješ stav tlačítka, pokud bude 0, tak skočí na tu proceduru pod ním podle toho, které tlačítko je stisknuto. Provede co má, a vrátí se zpátky na začátek.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#19 Příspěvek od michalino »

Popopepe, děkuji, zkouším to, ale píše mi to u debounce nějaké

illegal character GOT pravetlacitko
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#20 Příspěvek od popopepe »

vydrž, hodím to do bascomu :-)
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#21 Příspěvek od michalino »

Aha, už vím...A je to tím, že místo levetlacitko se musi napsat PORTA.7 což právě zase neřeší to přehození tlačítek


Popopepe, prosím, přesto, kdybych to chtěl vyřešit mimo použití DEBOUNCE?

Proč mi to nejede s tou předchozí variantou, vidíte tam nějakou chybu?


Děkuji
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#22 Příspěvek od popopepe »

Vidím, nemůžeš použít názvy left a right, jsou to interní názvy v Bascomu.

Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Left_1 Alias Pina.7
Right_1 Alias Pind.7

Levetlacitko = Left_1
Pravetlacitko = Right_1

start_1:
Do
Debounce Left_1 , 0 , Prava
Debounce Right_1 , 0 , Leva
loop

prava:
Cls
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
Locate 3 , 1
Lcd Left_1 ; Right_1
goto start_1


leva:
Cls
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
Locate 3 , 1
Lcd Left_1 ; Right_1
Goto Start_1
End

A jak budeš řešit ty tlačítka a jejich zákmity?
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#23 Příspěvek od michalino »

Popopepe, děkuji za Tvůj čas a rady..

Ty zákmity budu řešit dvěmi řádky podmínky, kde zjišťuju, jestli je stisknuto tlačítko, mezi pdomínkami dám cca 80ms času...myslím, že to je břídilský způsob, ale v tuto chvíli nutný, protože si nemůžu dovolit vytvořit ty odskoky, návěstí z DEBOUNCE...bylo by jich totiž pro tohle použití hodně....

Určitě se ale pomocí debounce obohatím a někdy využiju..

Způsob zápisu LEFT který Popopepe používáš u ebounce mám použít i na první verzi? Je to problém, proč to nefunguje?

Děkuji
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#24 Příspěvek od popopepe »

Budeš-li to testovat pomocí smyčky cca 80ms a pak vyhodnocovat, tak přesně tohle dělá debounce :-)
jestli napíšeš
left_1 alias pina.7
a debounce left_1,0,XXX

nebo rovnou
debounce pina.7,0,XXX je jedno
Nemusíš si jenom pamatovat který pin co znamená

Jinak nevím co za verzi Bascomu máš, ale mně to nedovolí ani uložit při tom left a right použitých u alias.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#25 Příspěvek od michalino »

Ahaaaaaa.....to je dobréééé...

Zkouším to teď v čipu



Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Left_1 Alias Pina.7
Right_1 Alias Pind.7

Levetlacitko = Left_1
Pravetlacitko = Right_1

Do
If Pravetlacitko = 0 Then
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
End If

If Levetlacitko = 0 Then
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
End If

Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko

Loop




a pořád nic, pořád se vypisuje jen 1 1
A když stisknu tlačítko, nezmění se ani jedna hodnota na 0

prosím, mám tam ještě něco nesprávně?
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#26 Příspěvek od popopepe »

Zjednoduš to, co to jde. Pro zkoušky. Vypusť ty left_1 a right_1
Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Levetlacitko = Pina.7
Pravetlacitko = Pind.7

Do
If Pravetlacitko = 0 Then
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
End If

If Levetlacitko = 0 Then
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
End If

Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko

Loop
End
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#27 Příspěvek od michalino »

Config Porta.7 = Input
Config Portd.7 = Input
Porta.7 = 1
Portd.7 = 1

Dim Levetlacitko As Bit
Dim Pravetlacitko As Bit

Levetlacitko = Pina.7
Pravetlacitko = Pind.7

Do
If Pravetlacitko = 0 Then
Locate 1 , 1
Lcd "prave"
Locate 2 , 1
Lcd " "
End If

If Levetlacitko = 0 Then
Locate 2 , 1
Lcd "leve"
Locate 1 , 1
Lcd " "
End If

Locate 3 , 1
Lcd Levetlacitko ; Pravetlacitko

Loop
End


tak nefunguje to ani takto... pořád jsou tam vypsané 1 1
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#28 Příspěvek od popopepe »

Nahraď na začátku ty portd.7=1 a porta.7=1
za pind.7=1
a pina.7=1

S tímhle mně ten Bascom taky vytáčí :-)
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#29 Příspěvek od Andrea »

Ta přiřazení Levetlacitko = Pina.7 Pravetlacitko = Pind.7 by asi měla být v té Do Loop smyčce, jinak se přečtou jen jednou.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#30 Příspěvek od michalino »

Když tam dám ty PINd.7=1 ....... tak to pořád hlasí, že leva a pravetlacitko = 0 v podmínkách...naopak to pořád splňuje podmínky
Odpovědět

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