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!
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
Moderatorzy:Jacek Bogusz, robertw, k.pawliczak, Moderatorzy
-
- -
- Posty:58
- Rejestracja:30 lip 2005, o 00:36
- Lokalizacja:Lublin
Zajrzyj do pomocy do Bascoma i poczytaj o:
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.
Kod: Zaznacz cały
Open "comd.0:28800,8n1" For Input As #2
Rs = Inkey()
Close #2
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.
Póbuje wszyskiego
$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
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
-
- -
- Posty:58
- Rejestracja:30 lip 2005, o 00:36
- Lokalizacja:Lublin
To w takim razie jeszcze doczytaj dokładnie jak działa ten fragment:
Aby działało zlikwiduj:
i najlepiej jeszcze dodaj buforowanie.
Kod: Zaznacz cały
Rs = Inkey()
Aby działało zlikwiduj:
Kod: Zaznacz cały
Wait 1
Już działa
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!
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!
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 29 gości