logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 Bascom - wyświetlanie tekstu po wciśnięciu przycisku na Porcie B.1

Lucasinhoo 01 Lut 2015 11:43 1032 11
REKLAMA
  • #1 14390171
    Lucasinhoo
    Poziom 9  
    Witam ,

    Bawię się ostatnio trochę bascomem, podpiąłem lcd zaprogramowałem i wszystko działa, teraz chciałbym zrobić coś takiego, że wyświetlacz będzie wyświetlał tekst po wciśnięciu przycisku tj. pojawieniu się na Porcie B.1 jedynki.

    $regfile = "m8def.dat"
    $crystal = 1000000
    
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
    Config Portb.1 = Input
    
    Do
    
    If Portb.1 = 1 Then
    
    Locate 1 , 1
    Lcd "testowanie"
    Wait 5
    Lowerline
    Lcd "test OK"
    
    
    End If
    Loop
    
    End


    Moje pytanie jest takie, czy aby uzyskać jedynkę na porcie B.1 przy użyciu przełącznika tzn. naciśnięciu go, powinienem podać na jego wejście napięcie ?

    Czy kod jest dobrze napisany ?
  • REKLAMA
  • #2 14390220
    Kuniarz
    Moderator Projektowanie
    Najczęściej robi się to odwrotnie - pin B.1 zwierasz do masy, a komendą SET podciągasz go do plusa zasilania. Wtedy program sprawdza "If portb.1=0 then...". Przy okazji, warto używać aliasów, wówczas program jest czytelniejszy, a ewentualna zmiana pinu to poprawka jednej linijki.
    Jeśli jednak z jakiś powodów musisz wyzwalać port jedynką, to podajesz tam napięcie zasilania (zapewne 5V), ale wówczas dobrze jest dać rezystor np. 10k do masy, żeby ściągał wejście i wymuszał na nim zero.
    Pomogłem? Kup mi kawę.
  • #3 14390243
    Lucasinhoo
    Poziom 9  
    1.Czyli do jednego wyprowadzenia switcha podaję napięcie zasilania, a jego odejście podpinam do pin.b.1 i naciskając go powinno podać 1 na pin ?
    2. Czy przed instrukcją if , trzeba zadeklarować pinb.1 jako stan niski, żeby potem przyciskiem zmienić go na wysoki ?

    Pytania na pewno trywialne, ale po prostu dopiero się uczę, dziękuję za odpowiedź.
  • REKLAMA
  • #4 14390283
    Kuniarz
    Moderator Projektowanie
    1. tak
    2. Trzeba to sprawdzić, bo przyznam, że nie robiłem nigdy odwrotnie niż tysiące konstruktorów ;-) . Deklarujesz pinb.1 jako wejście i być może, jeśli wykonasz komendę RESET to będzie tam wymuszony stan niski, ale to by chyba działało, gdyby był wyjściem. W przeciwnym razie pin wiszący w powietrzu będzie powodował błędne działanie programu.

    Jeśli to nie tajemnica, to dlaczego chcesz zrobić to wbrew sztuce ?
    Pomogłem? Kup mi kawę.
  • #5 14390385
    Mateusz@
    Poziom 18  
    2. Gdy ustawisz na pinie stan niski a następnie przyciskiem zwierasz do plusa to powstanie zwarcie.

    Masz takie możliwości:
    1. Robisz tak jak prawie wszyscy czyli włączasz wewnętrzny rezystor pullup w atmedze i przyciskiem zwierasz do masy.
    2. Dodajesz zewnętrzny rezystor pulldown (ponieważ atmegi nie maja wewnętrznego) i przyciskiem zwierasz do plusa.
    3. Zmieniasz uC na xmege i włączasz wewnętrzny rezystor pulldown i zwierasz do plusa.
  • #6 14390656
    Lucasinhoo
    Poziom 9  
    To może inaczej ;).

    Co zmienić w kodzie programu, żeby tekst na wyświetlaczu pojawił się dopiero po wciśnięciu switcha.

    $regfile = "m8def.dat" 
    $crystal = 1000000 
    
    
    Config Lcd = 16 * 2 
    Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5 
    
    
    Do 
    
    Locate 1 , 1 
    Lcd "testowanie" 
    Wait 5 
    Lowerline 
    Lcd "test OK" 
    
    
    
    Loop 
    
    End


    Oczywiście z użyciem funkcji if oraz portuB1.
  • #7 14390679
    Kuniarz
    Moderator Projektowanie
    To może inaczej, czy podłączysz łaskawie tego switcha między masę a portb.1 ?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #8 14390727
    Lucasinhoo
    Poziom 9  
    Podłączyłem switcha do masy a jego odejście do portub1. Na ekranie pojawia się mała kreska w pierwszym polu i to tyle.
  • REKLAMA
  • #9 14390761
    Kuniarz
    Moderator Projektowanie
    Proszę bardzo:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Oczywiście musisz się jeszcze zastanowić, co ma się dziać, gdy przycisk nie jest wciśnięty, bo ten program powyżej po pierwszym wciśnięciu wyświetli napisy i... one już zostaną.
    Pomogłem? Kup mi kawę.
  • #10 14390807
    Lucasinhoo
    Poziom 9  
    Załadowałem ten kod i co się dzieje ?
    Od razu pojawia się napis na LCD.
    Dopiero gdy odepnę programator z usb i odepnę jedno wyprowadzenie od przycisku, włożę usb i wepnę wyprowadzenie , wtedy wyświetla się jakaś kreska i dopiero po przyciśnięciu napis, coś jest nie tak .
  • #11 14390853
    Kuniarz
    Moderator Projektowanie
    Najczęstsza odpowiedź serwisu komputerowego "u mnie panie działa" :)
    Niestety, u mnie działa, na dowód fotki:

    Atmega8 Bascom - wyświetlanie tekstu po wciśnięciu przycisku na Porcie B.1 Atmega8 Bascom - wyświetlanie tekstu po wciśnięciu przycisku na Porcie B.1

    Programator mam podłączony, pinologia zgodnie z programem. Tak więc, przyjrzyj się jeszcze raz układowi, bo albo masz coś źle (inaczej), albo... nie wszystko tutaj przekazałeś.
    Pomogłem? Kup mi kawę.
  • #12 14390936
    Lucasinhoo
    Poziom 9  
    Hehe u mnie działa tylko jeden raz, tak, że po odpięciu zasilania jakby zapamiętywał i powtarzał bez wciskania, dopiero gdy odepnę wyprowadzenie i wszystko powtórzę to działa, znowu tylko 1 raz, a potem powtarza . ;)

    Dodano po 4 [minuty]:

    Przyczyną najprawdopodobniej wadliwy switch, bo gdy zwieram dwa kabelki tzn. masę i port to działa poprawnie ;).
REKLAMA