Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega8][bascom] licznik bcd i wyświetlanie na 7seq

Dj_Szparag 22 Cze 2009 22:17 3898 8
  • #1 22 Cze 2009 22:17
    Dj_Szparag
    Poziom 9  

    Witam :) jestem raczej początkującym elektronikiem i od niedawna zająlem sie programowaniem procesorów narazie bawie sie na trywialnie prostych uładach z Atmega8 (czyt. ustawianie swiecenia diod itp) Chciałem zbudowac układ który liczył by 0-9 i wyświetlane to było na siedmiosegmentowym wyświetlaczu...

    Oto schemat:
    [atmega8][bascom] licznik bcd i wyświetlanie na 7seq


    a to program:

    Code:

    $regfile = "m8def.dat"                                      'okraślamy typ procesora
    $crystal = 1000000                                          'określamy częstotliwośc taktowania
    Config Portc = Output                                       'ustawiamy port C jako wyjscia
           Portc = &B00000000
    Do                                                          'pętla programu start

      Portc = 00000000
      Waitms 1000
      Portc = 00000001
      Waitms 1000
      Portc = 00000010
      Waitms 1000
      Portc = 00000011
      Waitms 1000
      Portc = 00000100
      Waitms 1000
      Portc = 00000101
      Waitms 1000
      Portc = 00000110
      Waitms 1000
      Portc = 00000111
      Waitms 1000
      Portc = 00001000
      Waitms 1000
      Portc = 00001001
      Waitms 1000
    Loop
    end

    prosze o pomoc i o jakies proste wytłumaczenie moich błędów. myslalem jeszcze o robieniu tego za pomoca rozkazu INC i dodawania tylko nie wiem jak zawartośc rejestru wystawic na wyjscia z gory dziekuje za pomoc pozdrawiam :)

    0 8
  • Pomocny post
    #2 22 Cze 2009 22:26
    ZbeeGin
    Poziom 38  

    Zjadłeś przedrostki &B przy wartościach bitowych jaki już z niepohamowaną determinacją chcesz takiego zapisu używać.

    0
  • #3 22 Cze 2009 23:08
    rpal
    Poziom 27  

    Drogi kolego stosowanie 7447 kiedy to masz niewykorzystane porty w procku to przerost formy nad treścią. Podłącz po prostu wolne linnie poprzez rezystory lub ew. użyj drivera np. ULN 2803. Sterowanie na pinach portu nie będzie o wiele bardziej skomplikowane.

    0
  • Pomocny post
    #4 23 Cze 2009 04:59
    emarcus
    Poziom 35  

    Dj_Szparag napisał:
    Witam
    Chciałem zbudowac układ który liczył by 0-9 i wyświetlane to było na siedmiosegmentowym wyświetlaczu...
    ..........

    prosze o pomoc i o jakies proste wytłumaczenie moich błędów. myslalem jeszcze o robieniu tego za pomoca rozkazu INC i dodawania tylko nie wiem jak zawartośc rejestru wystawic na wyjscia z gory dziekuje za pomoc pozdrawiam

    Tu masz troche uproszczony twoj code do uladu z rysunku:


    Code:

    $regfile = "m8def.dat"                                      'okraslamy typ procesora
    $crystal = 1000000                                          'okreslamy czestotliwosc taktowania
    Config Portc = Output                                       'ustawiamy port C jako wyjscia
           Portc = 0

    Dim A As Byte

    Do                                                          'petla programu start
      For A = 0 To 9 Step 1

    ' Nastepna  linia  "Print A" nie jest potrzebna, sluzy tylko do zobrazowania increamentacji zmiennej w polu Bascom - "terminal emulator"
      Print A                                                   'Te linie mozna usunac!

      Portc = A
      Waitms 1000
      Next A
    Loop
    End



    Tak jak powyzej 'rpal' pisze; stosowanie tu BCD decodera/drivera dla 7- segment jest bez sensowne. ATmega 8, a nawet "slabszy" ATtiny 2313 processor ma na tyle "mocy produkcyjnej" ze spokojnie zastapi ten decoder nie tylko dla jednej cyfry, ale nawet kilku jezeli wystarczy odpowiednia ilosc wolnych pinow dla systemu multiplex i kluczowania.
    W tym przykladzie zmienna A wyswietlana jest w polu "terminal emulator"jako wartosc dziesietna, nie tylko dlatego ze hex i decimal w tym zakresie pokrywaja sie ale wartosc ta jest tu dla wygody dekodowana do dziesietnej postaci. Wewnatrz processora i na wyjsciu jest ona jednak w innym formacie. Radzilbym (dla treningu i ciekawosci) powiekszyc zakres zmiennmej A powyzej '9' i zastanowic sie jak to wyswietlic na 7 segmentowych display.
    Czy wybor 7-segm. byl narzucony w szkole czy wybrales przez przypadek?

    e marcus

    0
  • Pomocny post
    #5 23 Cze 2009 16:37
    rpal
    Poziom 27  

    Kolega potrzebuje po prostu wartości liczby w kodzie BCD jak pisał poprzednik i BCD, HEX i liczby dziesiętne pokrywają się w zakresie 0-9. W takim razie wystarczy wysłać 4 najmłodsze bity na wejście 7447 albo całą liczbę bo i tak podrt wyjściowy jest podłączony tylko to 4 końcówek 7447. Co do wartości powyżej 10 to zaproponowałbym aby użyć wejścia BI/RBO i jeden z dodatkowych pinów któregoś z portów po to aby blokować w ogóle wyświetlanie cyfr dla wartości powyżej 9. To co pokaże LED będzie generalnie bez sensu więc po co to obrazować(nota katalogowa i opis wyświetlanych znaków) Podanie "0" na to wejście zablokuje w ogóle wyświetlanie. Wystarczy tylko spradzić wartość liczby i ew. zmieniać stan BI/RBO.
    Jeszcze jedno jeden wyświetlacz LED wiele nie pokaże czy przypadkiem nie chodziło o wyświetlanie liczb o większej wartości czyli np. od 0 do 9999 ?

    0
  • #6 23 Cze 2009 19:12
    Dj_Szparag
    Poziom 9  

    nie nic mi nie było narzucone w zasadzie nie wiem czemu wybrałem LED mi chodzi tylko o nauczenie sie programowania chce zając sie obecnie budowaniem prostyych robotów (Waldka swiatło luba itp) w elektronice praktycznej znalazłem GREENBOT'a tam jest AtMega8 i po prostu chciałem pocwiczyc w szkole miałem duzo teorii i bardzo mało praktyki a jak juz była to raczej to 8051 i przyznam ze mało z tego pamietam... teraz po prostu buduje sobie proste płytki testowe które pomogą nauczyc mi sie programowac wiem ze zamiast LED moznaby wrzucic LCD... Dziekuje bardzo za pomoc napewno skorzystam z rad :)

    0
  • #7 23 Cze 2009 19:50
    janbernat
    Poziom 38  

    Kup sobie jakąś książkę i ćwicz.
    Książki są co prawda drogie-ale warto.
    Polecam "Mikrokontrolery dla początkujących" Piotra Góreckiego.
    I nie przywiązuj się do płytki testowej-zrobisz inną - na inny mikrokontroler lub kupisz.
    I help Zbigniewa Gibka do Bascoma ze strony MCSElectronics-darmo-ale jest b. mało o sprzęcie.
    Mógłby w końcu napisać o tym książkę -nie rozumiem dlaczego tego nie robi.

    0
  • #8 23 Cze 2009 20:03
    ZbeeGin
    Poziom 38  

    janbernat napisał:
    I help Zbigniewa Gibka do Bascoma ze strony MCSElectronics-darmo-ale jest b. mało o sprzęcie.
    Mógłby w końcu napisać o tym książkę -nie rozumiem dlaczego tego nie robi.

    Ok. Wywołany wyjaśniam.
    Help jest do programu BASCOM-AVR wraz z implementacją BASCOM Basic. O sprzęcie jest tyle ile powinno starczyć na początek i zachęcić do głębszego poznania np. not katalogowych. Choć część sprzętowa się ostatnio nieco powiększyła (patrz WWW)..
    Książka? Przecież Ten Którego Nazwiska Tu Nie Wymienię już takową (prze-)napisał.

    Koniec OFFa.

    0
  • #9 23 Cze 2009 20:37
    janbernat
    Poziom 38  

    Nie-Ten napisał inną książkę.
    A potrzebna jest książka dla tych którzy nie przepisują gotowców ale chcą zrozumieć JAK to działa.
    Dla zaawansowanych.
    To jest język (jak dla mikrokontrolerów) wysokiego poziomu.
    Ma swoje wady i zalety.
    Ma też błędy-jak wszystkie języki.
    Ale Ty - możesz.
    Może być tylko odwołanie do sprzętu-protokół, czasy, poziomy sygnałów itp.

    0