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

Jak przeprowadzić komunikację między ATmega16 a PC? Problem z kodem.

warczyna 01 Mar 2017 09:19 762 6
REKLAMA
  • #1 16314717
    warczyna
    Poziom 12  
    Witam. Próbuję przeprowadzić komunikację między ATMEGA16 a PC. Kod znalazłem na jednej ze stron i powinien być ok. Zmieniłem go tak aby wysyłał słowo test. Niestety w konsoli otrzymuję inne znaki niż te, które wysyłam. Znaki nie są losowe zawsze te same tak jakby był problem z kodowaniem. Przejściówka sprawdzona, sprzętowo też racze ok, program testowy zaczerpnięty z internetu też wygląda że wszystko ok. Gdzie może być problem? Załączam kod oraz printscreen z konsoli.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jak przeprowadzić komunikację między ATmega16 a PC? Problem z kodem.
  • REKLAMA
  • #2 16314753
    lukasrsv
    Poziom 20  
    Prędkość transmisji poprawną?
  • REKLAMA
  • #3 16314800
    BlueDraco
    Specjalista - Mikrokontrolery
    No patrzcie, przecież właśnie parę dni temu zebrałem tu cięgi, bo opisywałem dokładniuśko ten problem, który ma Kolega, i paru "ałtorytetów" zgodnie stwierdziło w nieparlamentarnych słowach, że tego problemu w ogóle nie ma. No to odsyłam Kolegę do wątku pt. Hydepark, a tak na szybko, to wstaw delay() po wysłaniu łańcucha. Wyrzuć też printf, który dołącza ze 2 KiB zbędnego kodu i zastąp go trywialną funkcją wysyłania ciągu znaków. Dzielnik zegara transmisji masz policzony źle, o czym też piszemy często, ale w tym przypadku jest to wyjątkowo bez znaczenia.
  • REKLAMA
  • #4 16314846
    Konto nie istnieje
    Konto nie istnieje  
  • #5 16314863
    tmf
    VIP Zasłużony dla elektroda
    Problemem jest zapewne niewłaściwe taktowanie ATMegi. Z komentarza w kodzie wynika, że jest to 1 MHz. Zapewne dokłądność tego zegara jest zbyt mała. W starych ATMegach, jeśli nie wykonujemy specjalnych zabiegów trzeba zastosować kwarc.
  • REKLAMA
  • #6 16317482
    marek-czarny
    Poziom 10  
    Teoretycznie w/g noty dla prędkości 2400 błąd transmisji dla 1MHz to 0,2%.
    Niestety czasem kalibracja fabryczna trochę kuleje więc możesz mieć pewien błąd wewnętrznego oscylatora.
    Jak to naprawić? masz rejestr o nazwie OSCCAL i tam możesz się pobawić.
    Co do zewnętrznych kwarców to są wartości tzw. przyjazne dla RS232 np. 110592MHz lub 73728MHz - zresztą w nocie masz to napisane....
    Przy stabilnych warunkach pracy (temperatura) nie trzeba koniecznie stosować zewnętrznego taktowania wystarczy wewnętrzny oscylator skorygowany jedynie wartością rejestru OSCCAL.
  • #7 16317603
    tmf
    VIP Zasłużony dla elektroda
    marek-czarny napisał:

    Przy stabilnych warunkach pracy (temperatura) nie trzeba koniecznie stosować zewnętrznego taktowania wystarczy wewnętrzny oscylator skorygowany jedynie wartością rejestru OSCCAL.


    Czyli w praktyce na biurku to działa, w rzeczywistych warunkach już niekoniecznie :) Kwarc to parę groszy, a rozwiązuje problemy. RC owszem, ale trzeba dodać kalibrację i to najlepiej w protokole - np. preambuła 55/aa i dostrajamy się aż odbierzemy poprawnie.
REKLAMA