Problem z transmisją RS-232

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Problem z transmisją RS-232

Post autor: gwozdex » 20 lut 2009, 13:21

Witam! Poniżej prezentuję najprostszy chyba z możliwych listingów odczytujący wskazania ADC i wysyłających je do PC przez RS232. Problem w tym ze nie da się wysłać nic z częstotliwością powyzej 4800 bps. zamiast konkretnych wartości jakieś krzaki przychodzą.

Kod: Zaznacz cały

' osiągnieta rozdzielczosc: 5V/1024= 0,00488V= 4,88mV
$regfile = "m8def.dat"
$crystal = 16000000
$prog &HFF , &HDE , &HD9 , &H00       ' generated. Take care that the chip supports all fuse bytes.
$baud = 4800
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim War_ac As Word            ' deklaracja zmiennej bo 10 bitów

War_ac = 350
'Start Adc
'Wait 1
Do
  'War_ac = Getadc(1)
  Print War_ac
  Waitms 900
Loop
Sprawdziłem:
- ustawienia w transmisji i w terminalu- takie same
- jak opóźnienie zmiejsze poniżej 600ms- wykrzacza się
- prędkość powyżej 4800 jest za duża ( przy wartościach opóźnienia 100 ms...1s)
- fusebits ustawione na zewnętrzny oscylator CKSEL=1110, SUT= 01
- przy wewnętrznym oscylatorze i zewnętrznym ( duzo większym) brak znaczących zmian.
- przewód oryginalny(kupny dobrze ekranowany) o długości 1m

Nie mam pomysłu co może być nie tak. Co więcej realizowałem już transmisję z prędkością 38400 ( na M162) i nie miałem takiego problemu.
Za okazaną pomoc dziękuję.

alaris
Użytkownik
Posty: 530
Rejestracja: 21 lut 2006, 14:56
Lokalizacja: Gorzow/Poznan

Post autor: alaris » 20 lut 2009, 13:33

gwozdex pisze:$crystal = 16000000
Wymien kwarc na 11,0592MHz badz 18,4320 i sprobuj wtedy. Sprobuj moze jeszcze ustawic dwa bity stopu w uK i komputerze.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 20 lut 2009, 16:03

Też myślę że to będzie wina kwarcu. Poczytaj część dotyczącą UART-u w nocie tego procesorka a wszystko będzie jasne.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 20 lut 2009, 18:14

Mam rozumieć że ten procesor jest taki wybredny jeśli chodzi o dobór kwarcu jeśli chcemy wysyłać dane z jakąś godną prędkością? Podane tabele ( nocie katalogowej) podają pomiary dla 3 różnych prędkości oscylatora... W dodatku jakichś udziwnionych wartości.

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 20 lut 2009, 18:59

Chodzi o to, że procesor jedyne co może zrobić żeby dobrać odpowiednią częstotliwość zegarową dla transmisji, to podzielić częstotliwość zgaru systemowego przez jakąś całkowitą liczbę. Niestety, nie z każdej częstotliwości zegara da się w ten sposób uzyskać odpowiednią częstotliwość do transmisji. Dlatego właśnie ludzie produkują i stosują takie dziwne kwarce jak 11059200Hz - z tej częstotliwości można idealnie uzyskać częstotliwości potrzebne do transmisji rs-232 poprzez podział przez liczbę całkowitą. Dotyczy to wszystkich procesorów.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 20 lut 2009, 19:31

Przyznam szczerze, że teoria może i prawdziwa ale nie sądzę zeby to była przyczyna moich problemów. przecież wiele razy realizowałem transmisję przez UART i nie miałem takich problemów: przy rezonatorze 4MHz, przy 12MHz. Przesyłałem po 20Kb danych z prędkościami 38400 przy w/w rezonatorach. Jedyne co to nigdy nie robiłem tego na ATmega8 (przeważnie był to ATMega162).

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 21 lut 2009, 11:21

gwozdex pisze:przy rezonatorze 4MHz, przy 12MHz.
No właśnie, a teraz masz 16MHz i może być zupełnie inaczej. Poza tym, różne sprzęty różnie tolerują takie rzeczy. Kiedyś chciałem przesyłać RS po podczerwieni - wiadomo, wprowadza to dodatkowe zakłócenia itp. Komputer odbierał taką transmisję bez najmniejszych problemów, ale mikroprocesor nie chciał już odbierać wcale.

snow
Użytkownik
Posty: 794
Rejestracja: 16 sty 2007, 3:44
Lokalizacja: lubelskie
Kontakt:

Post autor: snow » 21 lut 2009, 15:27

To że coś będzie działać przy jakichś nastawach różnych od tych podanych w nocie katalogowej to możliwe ale pewniejsze jest jeżeli się zapewni warunki jakie wymaga producent. Procesory bez poprawnie zbudowanego układu resetu też działają tyle że na biurku a w trudnych warunkach już nie zawsze. Dlatego należałoby stosować się do zaleceń producenta aby uniknąć problemów.

Awatar użytkownika
gwozdex
Użytkownik
Posty: 879
Rejestracja: 24 lut 2006, 10:04
Lokalizacja: Czechowice-Dziedzice
Kontakt:

Post autor: gwozdex » 23 lut 2009, 14:22

Witam!
Problem rozwiązałem- przyczyna tkwiła w sprzęcie. Nie wiedzieć dla czego MAX232 nie chciał pracować przy prędkościach większych niż 4800bps. Wymieniłem go i transmisja śmiga aż miło z prędkością 19200bps.

Dziękuję za pomoc. Janusz.

ODPOWIEDZ