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
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

BASCOM tlacitko1

#1 Příspěvek od michalino »

Dobrý den přátelé, prosím Vás o pomoc a radu s příkazem:

if a=1 then
left Alias Pind.7
right Alias Pina.7
else
right Alias Pind.7
left Alias Pina.7
end if

BASCOM hlasi ALIAS ALREADY USED

Jedna se o to, ze mam dve tlacitka a potrebuju je navzajem prohodit, tedy prohodit funkce techto tlacitek.
Tzn: Co dela tlacitko 1 ma delat tlacitko 2 a co dela tlacitko 2 ma delat tlacitko 1, pokud se splni odminka, ze a=1.

Je mozne toto v bascomu nejak vyresit takto jednoduchym zpusobem?

děkuji,
m.
Uživatelský avatar
Crifodo
Příspěvky: 14779
Registrován: 11 říj 2005, 00:00

#2 Příspěvek od Crifodo »

co takhle
Dim A As Bit
Dim Levy As Bit
Dim Pravy As Bit

Left Alias Pind.7
right Alias Pina.7


If A = 1 Then
Levy = Left
Pravy = Right
Else
Levy = Right
Pravy = Left
End If
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#3 Příspěvek od michalino »

Děkuji moc za radu,

zatím nad tím přemýšlím a zkouším to, ladím..zatím nefunguje...ale věřím, že to doladím...
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#4 Příspěvek od michalino »

Tak jsem se nakonec dostal k vysledku, ktery kontroluju v simulatoru a chci se prosim zeptat..

da se toto reseni opravdu položit jako plnohodnotnou nahradu na kontrolu stisku tlačitek ? Trosku se mi tam nelibi ten BIT, protoze v simulatoru musim dvakrat kliknout , aby se zmenil stav, oproti klasickemu reseni s tlacitky bez BITu...

dekuji
Uživatelský avatar
Crifodo
Příspěvky: 14779
Registrován: 11 říj 2005, 00:00

#5 Příspěvek od Crifodo »

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.
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#6 Příspěvek od popopepe »

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.

Má pravdu, předsedo :-)
Jde jenom o deklaraci. Tudíž pak už se v programu odkazuješ jenom jménem.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#7 Příspěvek od michalino »

Nějak se v tom nevyznam, ono totiz pri normalnim pouzivani tlacitek s ALIAS a bez BIT....


1) se hodnota ON, OFF zmenila jakmile jsem kliknul v simulatoru na zelenou diodku...jakmile jsem ji zhasnul, hodnota se zmenila na OFF jakmile jsem klikl na ni znovu, hodnota se zmenila na ON ihned..

a ted, za pouziti BITu se deje:

Kliknu na diodku, rozsvitim ji a zmeni se hodnotas, pak diodku opet zhasnu, pak ji rozsvitim a az ted se zmeni hodnota na jinou...nedeje se to zkratka hned...

Popopepe, znamena to s tou deklaraci, ze zameny tlacitek jednoduchym zpusobem ALIAS tedy nejde nebo je opravdu nahore uvedene řešení právě to řešení?

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

#8 Příspěvek od popopepe »

Ahoj Michalino, ale určitě to fungovat bude. Bit, stejně jako byte je pouze určení velikosti proměnné. Pokud nastavíš BIT, tak budeš mít dvě hodnoty 0 a 1. Pokud BYTE, zabereš v paměti 8 bitů.
PS: Co budou ta tlačítka vyvádět, že je chceš mezi sebou přehazovat? budeš s nima něco spínat?
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#9 Příspěvek od popopepe »

Použít alias v programu je kravina. To nejde. Tím ALIAS pouze řekneš překladači, že ten konrétní pin, který jsi si pouze pojmenoval tím aliasem jako nějaké zapamatovatelné slovo bude plnit jeho funkci. Jde pouze o deklaraci, která ve vlastním přeloženém programu vůbec neexistuje.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#10 Příspěvek od michalino »

Popopepe a všichni děkuji za rady,

ty tlacitka maji jezdit kurzorem na LCD

1) tlacitko nahoru

2) tlacitko dolu

ale kdyz to lcd obratim vzhuru nohama, tak potrebuju, aby nahoru bylo dolu a aby dolu bylo nahoru... :) a pritom staci, aby se definovalo, které tlačítko je které už při zapnutí celého obvodu....tedy úplně na začátku...

a to jestli je vzhuru nohama displej se pozna bud dalsim tlacitkem nebo kontrolou nejake hodnoty v programu....to je ale vedlejsi, hlavne nejak prohodit ty tlacitka...prosim Vas o pomoc....
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#11 Příspěvek od popopepe »

Takže ta tlačítka budou vstupní, tudíž je budeš testovat, zda jsou stlačená.

Takže.
vlevo alias pind.0
vpravo alias pind.1
.
.
do
Debounce vlevo,0,vlevo
debounce vpravo,0,vpravo
loop

Vlevo:
if a=1 then
xxx -ta tvoje podmínka, LCD je normálně, posun do leva
else
xxx - ta tvoje podmínka, LCD vzhůru nohama, posum do prava
endif
return

Vpravo:
if a=1 then
xxx -ta tvoje podmínka, LCD je normálně, posum do prava
else
xxx - ta tvoje podmínka, LCD vzhůru nohama, posun do leva
endif
return


Třeba... proměnná a určuje polohu displeje.
Naposledy upravil(a) popopepe dne 14 čer 2010, 15:23, celkem upraveno 2 x.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#12 Příspěvek od michalino »

takto vypada verze, ktera mi nejak nefunguje:

$sim
$regfile = "m16def.dat"

Config Porta.7 = Input ' tlacitko
Config Portd.7 = Input ' tlacitko
Config Portb.7 = Input ' tlacitko

Porta.7 = 1
Portd.7 = 1

Dim Levy As Bit
Dim Pravy As Bit

Left Alias Portd.7
Right Alias Porta.7

If Portb.7 = 0 Then
Levy = Left
Pravy = Right
Else
Levy = Right
Pravy = Left
End If

Do
'Print "Levy: " ; Levy ; " Pravy: " ; Pravy

If Pravy = 0 Then
Print "stisknuto pravy"
Pravy = 1
End If

If Levy = 0 Then
Print "stisknuto levy"
Levy = 1
End If
Loop


Prosím o pomoc...
Uživatelský avatar
popopepe
Příspěvky: 553
Registrován: 26 říj 2005, 00:00

#13 Příspěvek od popopepe »

Jak rozlišíš stav tlačítka na pinb.7, když nemáš zapnutý pullup?

doplnit portb.7=1

A v klidu bude na pinb.7 logická jednička.
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#14 Příspěvek od michalino »

Děkuji za radu,

už je tam Portb.7 = 1 ...ale porad nic, restartoval jsem i SW, nekdy to pomuze, ale nic...

$sim
$regfile = "m16def.dat"

Config Porta.7 = Input ' tlacitko
Config Portd.7 = Input ' tlacitko
Config Portb.7 = Input ' tlacitko

Porta.7 = 1
Portd.7 = 1
Portb.7 = 1

Dim Levy As Bit
Dim Pravy As Bit

Left Alias Portd.7
Right Alias Porta.7

If Portb.7 = 0 Then
Levy = Left
Pravy = Right
Else
Levy = Right
Pravy = Left
End If

Do
'Print "Levy: " ; Levy ; " Pravy: " ; Pravy

If Pravy = 0 Then
Print "stisknuto pravy"
Pravy = 1
End If

If Levy = 0 Then
Print "stisknuto levy"
Levy = 1
End If
Loop
Uživatelský avatar
michalino
Příspěvky: 348
Registrován: 03 srp 2009, 00:00

#15 Příspěvek od michalino »

Funguje, máš pravdu popopepe, jen prohodit slovo PORT za PIN a už se to rozjelo!!!!!Moje chyba!

CRIFODO a POPOPEPE, děkuju!!!!!!!!!!!!!!!!!!!!

:wink:
Odpovědět

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