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

Atmega8 + 24c16wp: Niepoprawne wyświetlanie danych w terminalu USART

pjasinski91 12 Mar 2013 21:16 1302 3
REKLAMA
  • #1 12052611
    pjasinski91
    Poziom 9  
    Witam.
    Niedawno rozpocząłem swoją przygodę z Atmegą8.
    Chciałem sprawdzić jak działa interfejs TWI. Na podstawie książki pana Cezarego Klimasza zakupiłem układ 24c16wp i napisałem program. Niestety program zamiast wyświetlać mi w terminalu liczby od 255 do 0 wyświetla bliżej nieokreślone sekwencje znaków. Czy mógłby mi ktoś pomóc znaleźć błąd w moim programie który powoduje niepoprawne działanie?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z góry dziękuję za wszelką pomoc i proszę o wyrozumiałość. ;)
  • REKLAMA
  • Pomocny post
    #2 12053167
    BlueDraco
    Specjalista - Mikrokontrolery
    Ten program wysyła bajty odczytane z pamięci jako znaki, a nie jako sekwencje cyfr ASCII. Zacznij od programu, który będzie w pętli co jakiś czas wysyłał np. kolejne cyfry lub litery. Jeśli to zadziała, będziesz wiedział, że masz poprawną transmisję - wtedy włącz obsługę pamięci i ew spróbuj wysyłać jej zawartość zamieniając ją na wartości np. szesnastkowe własną procedurą albo używając itoa lub printf.
  • REKLAMA
  • #3 12054112
    pjasinski91
    Poziom 9  
    Dziekuje za pomoc. Chyba rozumiem o co Ci chodzi. Napisałem taka funkcje main:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    I wszystko działa jak powinno.
    Natomiast jesli wgrywam program taki:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to już wychodzą bzdury.
    Czemu przyjmuje pojedyncze literki a cyfr juz nie chce?
    Czy to dlatego że w przyjmuje char?
    Ale jak zmieniam na int to w ogole nic mi nie wyswietla...
    Nie rozumiem dla czego?
  • #4 12054298
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie wychodzą bzdury - dzieje się dokładnie to, co każesz. Procesor ani EEPROM nie wie, co to są litery i cyfry - dla nich to wszystko są dane binarne. UART nie wie, czy przesyłasz literę czy cyfrę - przesyłasz 8 bitów. Te 8 bitów terminal wyświetla jako znak, używając kodu ASCII. Wysyłasz bajt o wartości 48 - terminal wyświetla cyfrę '0', bo ma ona w ASCII kod 48. Chcesz wyświetlić liczbę - musisz wysłać nie jej binarną wartość, a kolejno kody cyfr, które ją tworzą. Do tego służą np. procedury takie jak sprintf() lub itoa().
REKLAMA