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

Problem ATMEGA8 + BASCOM AVR ==> brak reakcji na wejścia

Lodoo 04 Mar 2006 11:55 2707 6
REKLAMA
  • #1 2372712
    Lodoo
    Poziom 16  
    Posty: 194
    Pomógł: 10
    Ocena: 10
    Witam!!

    pisze sobie program do alarmu samochodowego sterowanego z fabrycznego zamka centralnego.

    w emulatorze wszystko cacy

    w rzeczywistosci niestety nie :(

    klopot poleg na tym, ze uklad nie reaguje na zadne impulsy wejsciowe.

    podawalem nawet bezposrednio zwierajac piny procka i nic - brak reakcji...

    za przyklad podam programik ponizej
    uklad wyswietla "TEST" tak jak powinien na wyswietlaczu (czasy sie zgadzaja wszystko ok), wlacza podswietlenie tak jak powinien, ale nie reaguje wogole na napiecie na porcie D.5 i D.6 - podawalem tu bezposrednio z nozki zasilania proca i nic...

    powiedzcie co jest nie tak bo mnie trafia szlag juz z tym...

    aha - probowalem na 3 roznych prockach - to samo
    taktowanie zewnetrzna 4MHz jak i wewnerzne od 1 do 8 MHz - zawszeto samo.

    programator - stk 200/300
    zasilanie z baterii 9V + stabilizator 5V
    zasilanie ukladu 12V + stabilizacja na 5V
    (ze wzgledu na wymiar ukladu - chcialem jak najmniejszy - programuje proca na zewnatrz w osobnym ukladzie do programatora)

    oto program testowy:

    
    
    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Config Portd = &B11100110                                   'd0-alarm. d1-prealarm, d2-kierunki wejscie, d4-kierunki wyjscie, d3-syrena. d5-przycisk ukryty, d6-zaplon
    
    Config Portc = Input                                        'c0,c1-term., c2-lpg, c3-, c4-zamkniecie, c5-otwarcie, c6=RESET,
    
    Config Portb = Output                                       'LCD i kwarc
                                                                'b5-podswietlenie
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pb.1 , Db5 = Pb.2 , Db6 = Pb.3 , Db7 = Pb.4 , E = Pb.0 , Rs = Pd.7
    Cursor Off
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    Config Timer0 = Counter , Edge = Rising
    Config Timer1 = Timer , Prescale = 64
    
    Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
    
    '*********
     Powitanie:
    '*********
    
    
    Do
    Set Portb.5
    Cls
    Lcd "t"
    Wait 1
    Lcd "e"
    Wait 1
    Lcd "s"
    Wait 1
    Lcd "t"
    Wait 1
    If Portd.6 = 1 Then
    Cls
    Lcd "kasowanie"
    Wait 1
    End If
    If Portd.5 = 1 Then
    Cls
    Lcd "kasowanie"
    Wait 1
    End If
    Loop
    
    


    Dodano po 40 [minuty]:

    znalazlem kawalek przyczyny - CONFIG PORT pisze sie od tylu - pin 0 jest na koncu, pin 7 na poczatku - tak??

    jesli ustawie na poczatku wszystkie piny na stan 1 (portd = &B11111111) to na wyswietlaczu pojawia sie "KASOWANIE" tak jak powinno...
    a jak zrobie piny 6 i 5 na zero to wyswietlacz swieci i gorny rzad jest zaelniony szarymi prostokatami...

    nic juz nie rozumie...

    pomozcie plissssssss
  • REKLAMA
  • #2 2373140
    psooya
    Poziom 38  
    Posty: 5344
    Pomógł: 376
    Ocena: 575
    dopisz sobie
    portc = 255 i wszystko bedzie działać nie działają ci opry podciagajace wejscie i to tego wina
    Pozdro

    Dodano po 6 [minuty]:

    sory za ominięcie Config
    Portd = &B11100110 -
    1- oznacza wyjście a 0 wejscie wiec tu masz źle

    Dodano po 2 [minuty]:

    Te waity umieść sobie w podprogramie bo szkoda pamieci procesora jeśli bedziesz dalej używał "powitania"
    Pozdro
  • REKLAMA
  • #3 2373344
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Instrukcją If należy sprawdzać rejestr Pin a nie Port

    If Pind.6 = 1 Then ...
    
    If Pind.5 = 1 Then ...


    A po co konfigurujesz przetwornik analogowo-cyfrowy???

    A to przyjmuje?

    Config Lcdpin = Pin , Db4 = Pb.1 , Db5 = Pb.2 , Db6 = Pb.3 , Db7 = Pb.4 , E = Pb.0 , Rs = Pd.7


    Trąci to Bascomem 8501. Sprawdź w helpie jak się konfiguruje wyświetlacz.
  • REKLAMA
  • #4 2374437
    Lodoo
    Poziom 16  
    Posty: 194
    Pomógł: 10
    Ocena: 10
    juz jest ok - wszystko dziala jak powinno :)
    poprostu mialem PORTD zamiast PIND i od tylu podany config portow :)

    wasze rady jak najbardziej trafne...

    dlaczego konfid adc?? bo to jest takie urzadzonko 2 w 1 - centralka alarmu + termometr wewn./zewn. + miernik pozuiomu gazu LPG w zbiorniku i wstawilem tu caly konfig oprocz zmiennych z rozpedu...

    ale uwalilem 2 wyswietlacze przy okazji :-(
    o tym kolejny temat odpowiednio nazwany...
  • REKLAMA
  • #6 2374843
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    W AVR'ach portami zarządzają trzy rejestry PORT, PIN, DDR.
    PORT przechowuje dane wyjściowe, a w przypadku wejścia załącza rezystory podciągające (tam gdzie 1, 0-stan wysokiej impedancji).
    PIN odzwierciedla aktualny stan końcówek portu. Dla tego przez ten rejestr badamy co jest na wejściu.
    DDR zawiera dane o tym które bity portu są wejściami (0), a które wyjściami (1).
    Po resecie porty ustawiane sa jako wejściowe, więc bez ustawienia DDR żadna informacja z uC się nie wydostanie.

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczył braku reakcji mikrokontrolera ATMEGA8 programowanego w BASCOM AVR na sygnały wejściowe, mimo poprawnego działania wyświetlacza LCD i podświetlenia. Przyczyną było błędne użycie rejestru PORTD zamiast PIND do odczytu stanu pinów wejściowych oraz nieprawidłowa konfiguracja kierunku portów (DDR). Konieczne było również włączenie rezystorów podciągających poprzez ustawienie odpowiednich bitów w rejestrze PORT. Dodatkowo zwrócono uwagę na poprawne konfigurowanie wyświetlacza LCD oraz unikanie niepotrzebnej konfiguracji przetwornika ADC, jeśli nie jest używany. Po poprawieniu odczytu z rejestru PIND i konfiguracji portów układ zaczął działać zgodnie z oczekiwaniami. Wyjaśniono różnice między rejestrami PORT, PIN i DDR w AVR oraz ich rolę w obsłudze wejść i wyjść mikrokontrolera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA