Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

ATmega32 + UART POMOCY

mcv
-
-
Posty: 5
Rejestracja: 14 lut 2004, o 15:57
Lokalizacja: Kraków
Kontaktowanie:

ATmega32 + UART POMOCY

Postautor: mcv » 26 sty 2007, o 22:09

Bezskutecznie próbuję uruchomić transmisję szeregowa w atmega32, czy ktoś mógłby się podzielić swoimi doświadczeniami w tym temacie (kod w bascom), ja pisze tak:

$regfile = "m32def.DAT"
$crystal = 11059200

Config Lcd = 16 * 2
$baud = 28800
Dim Rs As Byte
Enable Interrupts
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Do
Open "comd.0:28800,8n1" For Input As #2
Rs = Inkey()
Close #2
Cls

Lcd Rs
If Rs <> 0 Then
Open "comd.1:28800,8n1" For Output As #1
Put #1 , Rs

Rs = 0
End If


Wait 1


Loop


Program na PC który wysyła pojedynczy bajt na com działa bo testuje go na innym procku i jest OK.

Dołączam screen ustawienia mich fusebitów.

Pozdrawiam wszystkich!
Załączniki
fuse.GIF

teedd
-
-
Posty: 14
Rejestracja: 3 cze 2003, o 15:54

Postautor: teedd » 27 sty 2007, o 00:18

Witam.
Zacząłbym od zmiany w tych liniach:

...
Open "comd.0:28800,8,n,1" For Input As #2
...
Open "comd.1:28800,8,n,1" For Output As #1
...


teedd

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 27 sty 2007, o 12:11

Zajrzyj do pomocy do Bascoma i poczytaj o:

Kod: Zaznacz cały

Open "comd.0:28800,8n1" For Input As #2 Rs = Inkey() Close #2
Open... i Close... służą do otwierania i zamykania PROGRAMOWEGO UARTu!
A po co chcesz używać programowego jak masz sprzętowy i to właśnie podłączony do tych samych nóżek które wykorzystujesz tutaj.
Pozdrawiam.

mcv
-
-
Posty: 5
Rejestracja: 14 lut 2004, o 15:57
Lokalizacja: Kraków
Kontaktowanie:

Póbuje wszyskiego

Postautor: mcv » 27 sty 2007, o 13:17

$crystal = 11059200
Config Lcd = 16 * 2
$baud = 57600
Dim Rs As Byte
Enable Interrupts
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
'Open "COM1:57600,8,n,1" For Binary As #2 nie działa wysyłanie do PC w ten sposób też
Wait 1

Do
Rs = Inkey() ' odbiera poprawnie bajt nareszcie
Cls
Lcd Rs ;
If Rs <> 0 Then
' Print Rs
' Open "COM1" For Binary As #1 nie działa
Print Rs 'zawiesza procek i na kompie odbieram 4 bajty zawsze takie same

Rs = 0
' Close #1
End If
Wait 1
Loop



teraz napewno użyłem hardwarowego uartu a dalej procek nic mi nie moze konkretnego wysłać do PC

K_o_n_r_a_d
-
-
Posty: 58
Rejestracja: 30 lip 2005, o 00:36
Lokalizacja: Lublin

Postautor: K_o_n_r_a_d » 27 sty 2007, o 13:27

To w takim razie jeszcze doczytaj dokładnie jak działa ten fragment:

Kod: Zaznacz cały

Rs = Inkey()

Aby działało zlikwiduj:

Kod: Zaznacz cały

Wait 1
i najlepiej jeszcze dodaj buforowanie.

mcv
-
-
Posty: 5
Rejestracja: 14 lut 2004, o 15:57
Lokalizacja: Kraków
Kontaktowanie:

Już działa

Postautor: mcv » 27 sty 2007, o 14:28

Dziekuję wszystkim za pomoc.

Program działa. Okazało się że na PC przez przypadek nie dokładnie obsłużyłem odbieranie bajtów. Wiedza o USART i UART którą zdobyłem na pewno się jeszcze nieraz przyda.


Pozdrawiam!

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 51 gości