Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega8 timer i wyświetlanie statyczne BCD

OXYGEN 24 Sep 2008 22:00 3754 12
  • #1
    OXYGEN
    Level 11  
    Jestem początkującym w programowaniu mikrokontrolerów , próbuje zrobic licznik obrotów/min wynik ma być wyświetlany na dwóch wyświetlaczach led7 seg. wyjście z portów steruje cd4543 a ten układ na darlingtony uln2003 z nich lcd.

    Dlaczego tak ?
    Ponieważ docelowo maja być duże wyświetlacze led.

    Problem polega na tym że w Bascomie nie wiem jak wyswietlić wynik przerwań timer1 na tych led .

    Próbowałem tak
    Licznik impulsów na minute

    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output
    Config Portc = Output


    Portb = &B11111111
    Portc = &B11111111
    Dim B As Integer
    Dim C As Integer ,
    Dim Obr As Byte , A As Integer , Licznik As Byte , T As Integer , T1 As Single
    Config Timer1 = Counter , Edge = Rising

    Wait 1



    Do                                                          'program główny - pętla
       Timer1 = 0                                               'zeruj licznik
       Start Timer1                                             'zacznij liczyć
       Waitms 500
       Stop Timer1                                              'przestań liczyć

     Licznik = Timer1
       Obr = &B(2)


       Shift T , Left , 8
       T = T + Obr
       T1 = T / 16
       A = T1 * 10

       C = A Mod 100
       C = C \ 10
       Portd = C
       B = A \ 100
       Portc = B
    Loop

    End





    No i własne błąd pętli .


    Loop expected !

    Czy ktoś udzieli mi informacji jak z tym timerem ....?
  • #3
    OXYGEN
    Level 11  
    Fakt :idea: umkneło mi .
    Poprawiłem program sie skompilował jescze wgram i zobacze czy działa
  • #4
    OXYGEN
    Level 11  
    Nic sie nie dzieje wyświetlane same 00 :( Dlaczego ??
    Dodaje schemat może coś nie tak

    Atmega8 timer i wyświetlanie statyczne BCD
  • #5
    snow
    Level 30  
    Nie znam się na bascomie ale czy zmienna T nie powinna być jakoś powiązana ze zmienną Licznik?
  • Helpful post
    #6
    zumek
    Level 39  
    A co to za składnia :?:
    Code:

       Obr = &B(2)

    Równie dobrze , mógłbyś napisać
    Code:

       Obr = 0


    Piotrek
  • #7
    skynet_2
    Level 26  
    wartoście binarne z tego co mi wiadomo zapisuje się tak
    0b11111111 a nie &B11111111
  • #8
    OXYGEN
    Level 11  
    Wartości binarne są napisane dobrze (Bascom) ,żeby sprawdzić zamiast Timera1 , napisałem pomiar napiecia z ADC(5) no i jest nieciekawie,
    podstawiałem wartoci jako stałe no i wartoći wyswietlają sie z krotnością liczby 6 . dzieliłem mnozyłem i nic pokazuje bzdury .Teraz nie wiem ale czy czasami nie jest potrzebna negacja do zaznaczenia ważnych bitów w konwesji do kodu BCD ? Wie ktoś o co chodzi

    program wygląda tak :

    Code:


    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Do
      Start Adc

       P = Getadc(5)                                            '

     Obr = P


    Shift T , Left , 8
    T = T + Obr
    T1 = T / 16

    A = T1 * 10
    B = A Mod 10

    C = A Mod 100
    C = C \ 10
    Portc = C
    B = A \ 100
    Portd = A

     'Waitms 100



    Loop

    End
  • Helpful post
    #9
    szelus
    Level 34  
    Ja się tam na BASCOMie nie znam, ale ten program to wyglada mi na generator liczb pseudolosowych ;)

    Weź się skup i zastanów co chcesz uzyskać. Kompletnie nie rozumiem, co Ty robisz z tym T. Co to ma reprezentować?

    Podpowiem, że jeżeli chcesz wyświetlić liczbę X z zakresu 0..99 na swoim wyświetlaczu, to byłoby to chyba coś takiego (zakładając, że wyświetlacz podłączony do portu C reprezentuje jednostki):
    Code:

    Portc = X Mod 10
    Portd = X / 10

    Reszty Twoich kombinacji kompletnie nie rozumiem.
  • Helpful post
    #10
    Pijopic
    Level 17  
    Nie wiem jak jest w BASCOMIE to traktowane, wiec to bardziej pytanie niz odpowiedz, jesli dzielisz C i A to otrzymujesz ulamek - czy nie trzeba tego zaokraglic do calosci by uzyskac wlasciwy wynik na wyswietlaczu?? I chyba cos masz namieszane z dzialaniami, bo po co wyliczasz B skoro wcale go nie wykorzystujesz??
  • #11
    OXYGEN
    Level 11  
    Wyswietlacz ma wyswietlać liczby od 00 do 99 proporcjonalnie do napiecia podanego na adc , b fakt niepotrzebne (kiedyś liczba setek na led) nie wiem jak napisać obliczenia do wyświetalania tych cyfr możliwe że coś napieszałem ale staram sie coś napisać samemu , a jak wychodzi to widać ,:cry: staram sie:cry::cry:
  • #12
    Pijopic
    Level 17  
    To moze wpierw poskladaj wszystko w logiczna calosc, wyliczasz cos z T ktore nic nie znaczy w tym dzialaniu, reszte wyjasnil Ci szelus...
  • #13
    OXYGEN
    Level 11  
    Własnie poskładałem wszystko i działa :
    serdeczne dzieki za pomoc
    Code:

    'woltomierz na 2 led 0-2,5v wsk 0..99  102


    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output
    Config Portc = Output


    Portb = &B00000000
    Portc = &B00000000

    Dim , X As Integer


    Config Adc = Single , Prescaler = Auto , Reference = Internal

    Do
      Start Adc                                                 'uruchomienie pomiaru z przetwornika
       X = Getadc(5)                                            'zapis wartosci z adc
       X = X / 10                                               'zwiekszenie zakresu pomiarowego przetwornika 2,5v
                                                                'skalowanie
                                                  '
      Portc = X Mod 10                                          'portc jednostki  modulo dzielenie z reszta
      Portd = X / 10                                            'portd dziesiątki
      Waitms 100

    Loop

    End