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] wyświetlacz 2x16 fuse bity

__Marcin__ 24 Kwi 2012 21:43 2485 7
  • #1 24 Kwi 2012 21:43
    __Marcin__
    Poziom 10  

    Witam
    Próbuje zrobić zegar z książki Marcina Wiązania "Programowanie mikro kontrolerów avr w języku Bascom"
    Przepisałem cały program z książki, podłączyłem według schematu
    [atmega8] wyświetlacz 2x16 fuse bity,
    i niestety na lcd pojawiają się kwadraciki.
    Programator mam usbasp, i program mkAVRCalculator.
    W zakładce fusy uproszczone próbowałem już zaznaczać wew. oscylator od 1-8 i zew kwarc też wszystkie po kolei , ale niestety ciągle na lcd widze kwadraciki.
    Do uC na pinie 9 i 10 mam dołączony kwarc 8MHz i kondensatory po 22pF ( na schemacie jest 27pF) czy może być tego przyczyna??
    Do procka mam na pinie 7 i 20 dołączone napięcia i do 8 i 22 GND
    Wyświetlacz to TC1602A-01(R)- czy może ten wyświetlacz się do tego nie nadaje??
    Inne programy jakie wrzucam działają, więc z programatorem jest wszystko OK.
    Co jeszcze mogę zrobić??

    Code:
    [syntax=basic4gl]'Program zegara wykorzystującego przerwania od Timer1
    
    'Przerwanie przepełnienia Timer1 jest generowane co 1 s
    '8 MHz/256/31250 = 1 s
    'Przycisk S1 ustawia minuty, a S2 godziny

    $regfile = "m8def.dat"                                      'informuje kompilator o pliku
          'dyrektyw mikrokontrolera
    $crystal = 8000000                                          'informuje kompilator
          'o częstotliwości oscylatora
          'taktującego mikrokontroler
    Config Pinb.1 = Input                                       'linia PB1 jako wejściowa
    Config Pinb.2 = Input                                       'linia PB2 jako wejściowa
    Config Lcd = 16 * 2                                         'konfiguracja typu wyświetlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5       'konfiguracja linii
          'mikrokontrolera, do których
          'dołączono wyświetlacz
          'LCD
    Config Timer1 = Timer , Prescale = 256




          'konfiguracja Timer1 jako timer
          'z podziałem preskalera przez
          '256

    Declare Sub Wysw_czas                                       'procedura wyświetlająca czas na
          'LCD w formacie gg:mm:ss
    On Timer1 Odmierz_1s                                        'przerwanie od przepełnienia
          'Timer1 o etykiecie Odmierz_1s

    Dim Sekundy As Byte                                         'zmienna zliczająca sekundy
    Dim Minuty As Byte                                          'zmienna zliczająca minuty
    Dim Godziny As Byte                                         'zmienna zliczająca godziny
    Dim Nowa_w As Bit                                           'flaga zezwolenia aktualizacji
          'czasu na LCD
    Dim Wart_bcd As Byte                                        'zmienna pomocnicza, w której
          'jest zapisywana wartość BCD
          'czasu

    S1 Alias Pinb.2                                             'przypisanie nazwie Pinb.2
          'nazwy S1
    S2 Alias Pinb.1                                             'przypisanie nazwie Pinb.1
          'nazwy S2

    Enable Interrupts                                           'odblokowanie globalnego systemu
          'przerwań
    Enable Timer1                                               'odblokowanie przerwania od
          'przepełnienia Timer1
    Counter1 = 34286                                            'wartość początkowa wpisywana do
          'Timer1 (65536 - 31250 = 34286)

    Set Nowa_w                                                  'zezwolenie na wyświetlenie
          'aktualnego czasu
    Set Portb.1                                                 'dołączenie do linii PB1
          'rezystora podciągającego
    Set Portb.2                                                 'dołączenie do linii PB2
          'rezystora podciągającego
    Do                                                          'pętla główna programu
     Call Wysw_czas                                             'wywołanie procedury
          'wyświetlającej aktualny czas
     If S1 = 0 Then                                             'jeśli przyciśnięty S1, to
      Waitms 25                                                 'opóźnienie dla eliminacji drgań
          'styków
      If S1 = 0 Then                                            'sprawdzenie, czy przycisk S1
          'dalej naciśniety, jeśli tak, to
       Incr Minuty                                              'zwiększenie wartości minut
       Sekundy = 0                                              'wyzerowanie zmiennej Sekundy
       If Minuty = 60 Then                                      'jeśli wartość Minuty = 60, to
        Minuty = 0                                              'zerowanie wartości Minuty
       End If
       Set Nowa_w                                               'zezwolenie na wyświetlenie
          'czasu
       Call Wysw_czas                                           'wywołanie procedury
          'wyświetlenia aktualnego czasu
       Waitms 200                                               'opóźnienie 200 ms
      End If                                                    'koniec instrukcji warunkowej
     End If
     If S2 = 0 Then                                             'jeśli przyciśnięty S2, to
      Waitms 25                                                 'opóźnienie dla eliminacji drgań
          'styków
      If S2 = 0 Then                                            'sprawdzenie czy przycisk S2
          'dalej naciśniety, jeśli tak, to
       Incr Godziny                                             'zwiększenie wartości Godziny
       If Godziny = 24 Then                                     'jeśli wartość Godziny = 24, to
        Godziny = 0                                             'wyzerowanie wartości Godziny
       End If
       Set Nowa_w                                               'zezwolenie na wyświetlenie
          'czasu
       Call Wysw_czas                                           'wywołanie procedury
          'wyświetlenia aktualnego czasu
       Waitms 200                                               'opóźnienie 200 ms
      End If                                                    'koniec instrukcji warunkowej
     End If
    Loop
    End                                                         'koniec programu


    Sub Wysw_czas                                               'procedura wyświetlająca czas
     If Nowa_w = 1 Then                                         'jeśli flaga Nowa_w = 1, to
      Cls                                                       'czyszczenie LCD
      Wart_bcd = Makebcd(godziny)                               'zamiana wartości Godziny na
          'wartość w kodzie BCD
      Lcd Bcd(wart_bcd) ; ":"                                   'wyświetlenie wartości godzin
          'w kodzie BCD zamienionych na
          'tekst oraz znaku :
      Wart_bcd = Makebcd(minuty)                                'zamiana wartości Minuty na
          'wartość BCD
      Lcd Bcd(wart_bcd) ; ":"                                   'wyświetlenie wartości minut
          'w kodzie BCD zamienionych na
          'tekst oraz znaku :
      Wart_bcd = Makebcd(sekundy)                               'zamiana wartości Sekundy na
          'wartość w kodzie BCD
      Lcd Bcd(wart_bcd) ;                                       'wyświetlenie wartości sekund
          'w kodzie BCD zamienionych na
          'tekst
      Reset Nowa_w                                              'zerowanie flagi Nowa_w
     End If
    End Sub                                                     'koniec procedury

    Odmierz_1s:                                                 'podprogramu obsługi przerwania
          'przepełnienia od Timer1
     Counter1 = Counter1 + 34286                                'wpisanie wartości początkowej
          'licznika
     Incr Sekundy                                               'zwiększenie o 1 wartości
          'Sekundy
     Set Nowa_w                                                 'zezwolenie na wyświetlenie
          'czasu
     If Sekundy = 60 Then                                       'jeśli Sekundy = 60, to
      Sekundy = 0                                               'wyzerowanie wartości Sekundy
      Incr Minuty                                               'zwiększenie o 1 wartości Minuty
      If Minuty = 60 Then                                       'jeśli Minuty = 60, to
       Minuty = 0                                               'zerowanie wartości Minuty
       Incr Godziny                                             'zwiększenie o 1 wartości
          'Godziny
       If Godziny = 24 Then                                     'jeśli Godziny = 24, to
        Godziny = 0                                             'zerowanie wartości Godziny
       End If                                                   'koniec warunków
      End If
     End If
    Return                                                      'powrót z przerwania[/syntax]

    0 7
  • #2 24 Kwi 2012 21:47
    gaskoin
    Poziom 38  

    __Marcin__ napisał:

    Co jeszcze mogę zrobić??


    Nie znam bascoma więc niewiele pomogę. Ale co możesz zrobić to używać tej książki jako podkładki pod myszkę (tak patrząc na schemat)

    0
  • #5 24 Kwi 2012 22:17
    gaskoin
    Poziom 38  

    Co wy macie z tymi blogami? :D

    0
  • #6 24 Kwi 2012 22:20
    dondu
    Moderator Mikrokontrolery Projektowanie

    gaskoin napisał:
    Co wy macie z tymi blogami? :D

    Pokazujemy to czego Ty nie wyjaśniłeś :)

    0
  • #7 24 Kwi 2012 22:23
    30402
    Użytkownik usunął konto  
  • #8 26 Kwi 2012 18:25
    __Marcin__
    Poziom 10  

    Dzięki wszystkim za pomoc, okazało się że wyświetlacz kupiłem uszkodzony, wymiana pomogła - teraz wszystko działa :D .

    Dzięki jeszcze raz

    0