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

[ATmega16][Bascom][Proteus] problem z LCD i PD7

ElKuba 23 Maj 2008 13:32 5347 11
REKLAMA
  • #1 5171742
    ElKuba
    Poziom 11  
    Witam
    Programowanie mikrokontrolerów zajmuję się już od ładnych paru lat czasem częściej a czasem z dłuższymi przerwami, więc wiem na ten temat co nieco. Od niedawny próbuję coś zrobić na AVR.
    I tu pojawia się pewien problem, nie wiem czy wynika on ze złej konfiguracji czy też z możliwościami programów które używam.
    Mianowicie napisałem prościutki program w bascomie 1.11.7.4 (nie będę go przytaczał bo jest banalny) który miał wyświetlić napis na wyświetlaczu LCD. Napisany program testuję w programie Proteus 6.5. Gdy używałem atmega 8 wszystko było ok, napis się pojawiał, ale gdy chciałem użyć atmega 16 lub 32 na wyświetlaczu nic się nie pojawiało.
    Kolejnym problemem było to że podczas testów w proteusie nie mogłem zmienić stanu niektórych pinów, między innymi PD7, był on oznaczany szarym kwadracikiem i nic się z tym nie dało zrobić (kto zna proteusa ten wie co to szary kwadracik ;) ).
    I teraz mam pytanie czy jest to problem wynikający z niedociągnięć programu proteus czy może muszę jakoś specjalnie konfigurować piny, bo PD7 to tez wyjście komparatora licznika.
  • REKLAMA
  • #2 5172004
    Freddy
    Poziom 43  
    Wszystkie etaty wróżek są wolne, nie ma chętnych.
    Może zamieść program, plik do Proteusa, ktoś może go ma i wtedy pomoże, bo tak to tylko z sufitu można odczytać odpowiedź.
  • REKLAMA
  • #3 5172198
    elektrofil
    Poziom 17  
    to ja pozgaduje nie wiem z jakim skutkiem.
    -ustawienia fusebit'ów- jtag.
    -ustawienie usart'a
    -ustawienie pwm

    w realu przeszkadza w działaniu lcd, w symu także powinien :)
  • #4 5172949
    ElKuba
    Poziom 11  
    Więc tak, kod w bascomie wygląda następująco:
    $regfile = "m8def.dat"   'tu oczywiście w zależności czy 8 czy 16
    $crystal = 8000000               
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Do
       Cls
       Waitms 100
       Lcd "napis"
       Waitms 100
    Loop
    
    End

    Pisałem że banalny ;p

    Gdy wgram go do atmega8 to wszystko jest OK
    [ATmega16][Bascom][Proteus] problem z LCD i PD7
    Natomiast gdy zamiast atmega8 zastosuję atmega16 to już nie działa, a na dodatek pin Portd.7 jest nieaktywny
    [ATmega16][Bascom][Proteus] problem z LCD i PD7

    I w pierwszym i drugim przypadku nie ruszałem żadnych fusebitów (zostawiłem standardowe).
    Jak by ktoś chcial to załączam jeszcze projekt z proteusa.
  • #5 5172966
    don diego
    Poziom 32  
    Skoro standardowe, to chyba powinieneś zdeklarować $crystal=1000000, bo taki jest zegar mikrokontrolera z fabrycznymi ustawieniami fuse bitów.
  • #6 5173007
    ElKuba
    Poziom 11  
    Cytat:
    Skoro standardowe, to chyba powinieneś zdeklarować $crystal=1000000, bo taki jest zegar mikrokontrolera z fabrycznymi ustawieniami fuse bitów.

    Niestety to nie to :(
  • #7 5173298
    Freddy
    Poziom 43  
    ElKuba, a czy atmega8 i AtMega16 masz fabrycznie nowe, czy od kogoś ? Może ktoś wpisał fuse

    Dodano po 5 [minuty]:

    nie zauważyłeś w w ATMega16 pd7 ma też drugą funkcję OC2 (Timer/Counter2 Output Compare Match Output)
  • REKLAMA
  • #8 5173731
    ElKuba
    Poziom 11  
    Cytat:
    ElKuba, a czy atmega8 i AtMega16 masz fabrycznie nowe, czy od kogoś ? Może ktoś wpisał fuse

    jak już napisałem w pierwszym poście:
    Cytat:
    ...Napisany program testuję w programie Proteus 6.5. ... I teraz mam pytanie czy jest to problem wynikający z niedociągnięć programu proteus...

    Tak więc projekt testuję tylko wirtualnie za pomoca Proteusa, i dla atmega 8 nie miałem najmniejszych problemów, wszystko działało (liczniki, przerwania itp., bo trochę już na niego pisałem i symulacje w proteusie chodziły), a gdy wybralem atmega 16 lub 32 to już pewne problemy były (opisane wcześniej). I tu się skłaniam do tego że jednak proteus niestety nie do końca dobrze symuluje niektóre układy.

    Cytat:
    nie zauważyłeś w w ATMega16 pd7 ma też drugą funkcję OC2 (Timer/Counter2 Output Compare Match Output)

    A owszem, zauwazylem, i już o tym pisałem:
    Cytat:
    ... czy może muszę jakoś specjalnie konfigurować piny, bo PD7 to tez wyjście komparatora licznika.

    Konfigurowałem timer2 na compare = disconnect, i też "ręcznie" ustawiałem bity (już nie pamiętam jakie) żeby odłączyć pin od wyjścia komparatora i to nic nie dało.
  • REKLAMA
  • #9 5174565
    Freddy
    Poziom 43  
    Podeślij ten test.hex inaczej nie da się uruchomić symulacji
  • #10 5175227
    ElKuba
    Poziom 11  
    Oki, przesyłam hex-a. Jak by ktoś na rzeczywistym ukladzie (atmega16 lub atmega32) sprawdzil to byłoby super. Schemat połączeń wyświetlacza jak powyżej.
  • #11 5176797
    lowca2
    Poziom 1  
    Ostatnio miałem taki sam problem jak ty, na atmega8 i at89c... lcd działał jak powinien, szukałem błedu w fuse bitach ale jak sie okazało po 3 dniach błąd miałem zupełnie gdzie indziej, w programie dla atmegi16 dodatkowo trzeba wpisac Initlcd i wszystko zaczęło działać,
    nie wiem czy to ci moze pomoże ale mozesz spróbować, pozdr.
  • #12 5443276
    ElKuba
    Poziom 11  
    Zrobiłem sobie długą przerwę, ale teraz już mogę sam odpowiedzieć na moje pytanie zadane w pierwszym poście ;)
    Moje problemy wynikały z niedociągnięć symulatora programowego Proteus 6.5 (w którym jak kilka razy zaznaczałem próbowałem uruchomić swój projekcik), a nie z błędów w programie, połączeniach, fusach itp. jak to sugerowali inni.
    Na przyszłość dla wszystkich którzy próbują zrobić aplikację w Proteusie: atmega8 działa OK, natomiast atmega16 oraz atmega32 nie są do końca dopracowane (przynajmniej w wersji 6.5) i nie dzialają poprawnie.
    Zaznaczam jeszcze raz że chodzi tu o testowanie prototypowych układów z wykorzystaniem programu Proteus !!! Po zlutowaniu rzeczywistego układziku, wszystko było OK, i układzik działał bez problemu.
    Na tym zakończmy ten post ;p

    Pozdrawiam
REKLAMA