Witam
Pisałem już w innym dziale na podobny (łączący się problem) z działaniem wyjścia z TxD z układu, jednak udało mi sie go rozwiązać, więc stanąłem przed obliczem drugiego problemu (chyba).
Jestem w trakcie poszukiwania błędu w transmisji szeregowej, na chwile obecną wysył.
Nie używam przerwań, timerów itd, bo wszystko może działać po chamsku, z kodem opóźniającym wkodowanym.
ilosc_bitow=bit_startu+bity_danych+[ewentualny]bit_parzystosci+bity_stopu[1 lub 2]
Algorytm wygląda mniej więcej tak:
1. Ustawiam 0 na TxD (bit startu) i czekam FREQUENCY/(BAUD*ilosc_bitow) cykli
2. Sprawdzam czy bit na najmłodszej pozycji jest równy 0 lub 1 i adekwatnie ustawiam 1->1, 0->0 stan na TxD, czekając odpowiedni czas.
3. Przesuwam daną w prawo o bit
4. Zmniejszam licznik danych wysłanych, jeżeli wysłałem komplet (bity_danych) to ide dalej, jeśli nie wracam do 2.
5. Wysyłam bit parzystości, który licze przy okazji w krokach 2-3 i znowu czekam [krok opcjonalny, jeżeli bitu nie ma to go nie wykonuje]
6. Wysyłam odpowiednią ilość bitów stopu, stan 1
7. Wychodze z procedury.
Czy gdzieś robie błąd?
W AVRStudio zmiany stanu na bicie wyjściowym wyglądają na odpowiednie, czasy np dla BAUD ustawionego na 2400 i zegarze 4MHz wynoszą 414,5 us, czyli mam 2,1 us błędu, czyli jakieś 0,5%.
Jeśli ktoś, miałby ochotę sprawdzić kod, to wkleję go, ale nie chce tego robić od razu, żeby nikogo nie odstraszyć, bo troszkę tego jest.
Pozdrawiam
Pisałem już w innym dziale na podobny (łączący się problem) z działaniem wyjścia z TxD z układu, jednak udało mi sie go rozwiązać, więc stanąłem przed obliczem drugiego problemu (chyba).
Jestem w trakcie poszukiwania błędu w transmisji szeregowej, na chwile obecną wysył.
Nie używam przerwań, timerów itd, bo wszystko może działać po chamsku, z kodem opóźniającym wkodowanym.
ilosc_bitow=bit_startu+bity_danych+[ewentualny]bit_parzystosci+bity_stopu[1 lub 2]
Algorytm wygląda mniej więcej tak:
1. Ustawiam 0 na TxD (bit startu) i czekam FREQUENCY/(BAUD*ilosc_bitow) cykli
2. Sprawdzam czy bit na najmłodszej pozycji jest równy 0 lub 1 i adekwatnie ustawiam 1->1, 0->0 stan na TxD, czekając odpowiedni czas.
3. Przesuwam daną w prawo o bit
4. Zmniejszam licznik danych wysłanych, jeżeli wysłałem komplet (bity_danych) to ide dalej, jeśli nie wracam do 2.
5. Wysyłam bit parzystości, który licze przy okazji w krokach 2-3 i znowu czekam [krok opcjonalny, jeżeli bitu nie ma to go nie wykonuje]
6. Wysyłam odpowiednią ilość bitów stopu, stan 1
7. Wychodze z procedury.
Czy gdzieś robie błąd?
W AVRStudio zmiany stanu na bicie wyjściowym wyglądają na odpowiednie, czasy np dla BAUD ustawionego na 2400 i zegarze 4MHz wynoszą 414,5 us, czyli mam 2,1 us błędu, czyli jakieś 0,5%.
Jeśli ktoś, miałby ochotę sprawdzić kod, to wkleję go, ale nie chce tego robić od razu, żeby nikogo nie odstraszyć, bo troszkę tego jest.
Pozdrawiam
