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

ATmega16l - błąd wyświetlania znaków

28 Sty 2017 19:36 792 14
  • Poziom 8  
    Dobry wieczór, krótko :

    - program z wykorzystaniem ATmega16L + hc-sr04(ultradźwiękowy czujnik odległości)
    - mam problem z wyświetlaniem znaków bo powinno pisać : CIRCUIT DIGEST/DISTANCE=[i tu odleglosc w cm]
    - jest napisane CKSCWKT DKGGST/DKSTCOCG?33CM
    - na schemacie jest ATmega32 ja mam ATmega16 - http://circuitdigest.com/fullimage?i=circuitdiagram_mic/AVR-Ultrasonic-Sensor-Circu.gif

    jakie mogą być przyczyny błędu ? programator w Eclipse mam ustawiony dobry USBASP, taktowanie na 1000000 ...

    Kod programu:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Specjalista - Mikrokontrolery
    Tu jest błąd:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czekać należy po opuszczeniu E, a nie przed.
  • Użytkownik usunął konto  
  • Poziom 8  
    BlueDraco napisał:
    Tu jest błąd:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czekać należy po opuszczeniu E, a nie przed.


    Dobra to poprawię. Na co to wpływa ?

    Dodano po 1 [minuty]:

    Piotrus_999 napisał:
    BlueDraco napisał:
    ~1<<enable;

    rozumiem że chodzi o wyzerowanie wszystkich bitów oprócz 7 i 6 (dla enable == 5)?

    Czy o ~(1 << enable)?
    Dodano po 8 [minuty]:
    monetek napisał:
    while(*string_of_characters > 0)


    Znaków o kodach > 127 rozumiem że świadomie nie chcesz drukować.


    1. zerowanie wszystkich :)

    2. drukuje się napis w pierwszej lini i drugiej tylko zmodyfikowany jak by tablica ASCII się przesunęła o ileś bitów ...
  • Użytkownik usunął konto  
  • Poziom 8  
    Piotrus_999 napisał:
    Ok - mało czytelna metoda ale ....


    Wszystko jest dobrze podłączone, a zamiast np adresu newbiehack.com mam ogwckgHcck/com

    czy to może być spowodowane brakiem potencjometra - podpinam V0 na wyświetlaczu do masy. Albo wadliwyi przewodawmi/płytką stykową ?
  • Specjalista - Mikrokontrolery
    To jest spowodowane brakiem oczekiwania, o którrym pisałem.
  • Poziom 8  
    BlueDraco napisał:
    PORTD |= 1<<enable;
    _delay_ms(8);
    PORTD &= ~1<<enable; 


    czyli jak to powinno wyglądać żeby było dobrze ? tak ? :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [minuty]:
    BlueDraco napisał:
    To jest spowodowane brakiem oczekiwania, o którrym pisałem.


    chciałem to co Pan napisał sprawdzić innym programem. Znalazłem gdzieś na szybko zwykłe wyświetlanie na ekranie tekstu. Problem jest identyczny...

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 8  
    Piotrus_999 napisał:
    monetek napisał:
    ~1<<LightSwitch

    To nie robi tego co sadzisz. To przesuwa wartość 0xfe ileś tam pozycji w lewo, a nie przesuwa jedynkę a potem neguję wartość.


    Jakaś propozycja jak rozwiązać ten problem ? bo ja siedzę już od kilku dni nad tym samym. Montuje kolejne układy i dzieje się to samo ...
  • Użytkownik usunął konto  
  • Poziom 8  
    " ~(1<<LightSwitch)"

    tak też zrobiłem i nic. Nie wiem co jest grane.
  • Użytkownik usunął konto  
  • Specjalista - Mikrokontrolery
    W tym programie jest mnóstwo błędów i pogwałceń parametrów czasowych.

    Odpowiedz sobie na pierwsze i podstawowe pytanie: czy chcesz zajrzeć do datasheet HD4478. Jeśli tak - to zajrzyj, i pisz wg. parametrów czasowych, które tam podano. Jeśli nie - to weź jeden z min. tysiąca programów obsługi wyświetlacza dostępnych w Internecie. Wyjście pośrednie "popatrzę w jakiś program i napiszę po swojemu nie mając pojęcia o wymaganiach wyświetlacza" jak widać nie działa.

    Pisząc obsługę wyświetlacza trzeba uwzględnić
    - minimalne odstępy pomiędzy zboczami E,
    - czas od ustalenia RS i RW do narastającego zbocza E
    - czas od ustalenia danych do opadającego zbocza E (nie występuje, gdy dane ustawiasz przed narastającym,
    - czas wykonania poleceń (dla uproszczenia można podzielić polecenia na dwie grupy, żeby mieć tylko dwa możliwe czasy + dodatkowe opóźnienie przy inicjowaniu),
    - niewiarygodną wartość BUSY (więc lepiej w ogóle go nie testować i polegać wyłącznie na czasie wykonania poleceń,
    - czas wstawania zasilania - dodatkowe oczekiwanie przed pierwszym poleceniem inicjowania.
  • Poziom 8  
    Coś mi się wydaje, że jeszcze długa droga przede mną do programowania AVR. No ale nie poddaje się - próbuję zrozumieć co piszecie. Ogólnie program jak i sam schemat jest z (nie wiem czy można to podlinkować) ale dla jakiegoś lepszego obrazu : Link