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ę

Jak wysłać znak przez 2 uart sprzętowy

Fredy
-
-
Posty: 141
Rejestracja: 27 mar 2005, o 21:45
Lokalizacja: Małopolska

Jak wysłać znak przez 2 uart sprzętowy

Postautor: Fredy » 25 kwie 2009, o 23:20

Pytanie jak w temacie. Mam procka ATMEGA162 który ma 2 sprzętowe UARTY.
Jak można skorzystać z 2 uartu.
W 1 UARCIE mamy takie funkcje jak Inkey(), Waitkey(),Input(),Ischarwaitnig. Te funkcje także powinny mieć swoje odpwoedniki w 2 uarcie sprzętwoym.

Print1 ani Print2 nie dziala.
Ma ktoś jakieś sugestie ?

pozdrawiam

Awatar użytkownika
pikczu
-
-
Posty: 89
Rejestracja: 5 paź 2003, o 19:55
Lokalizacja: Dublin
Kontaktowanie:

Postautor: pikczu » 26 kwie 2009, o 11:42

Witam
Zobacz w helpie na config serial in
Musisz użyć hasha # żeby zaznaczyć który to uart

Kod: Zaznacz cały

'----------------------------------------------------------------------------------------- 'name : rs232bufferout1.bas 'copyright : (c) 1995-2005, MCS Electronics 'purpose : how to use a serial output buffer on the second UART ' this sample will only work for chips with a seond UART like ' the M162 and M128 'micro : Mega162 'suited for demo : yes 'commercial addon needed : no '----------------------------------------------------------------------------------------- $regfile = "m162def.dat" ' specify the used micro $crystal = 4000000 ' used crystal frequency $baud = 9600 ' use baud rate $hwstack = 32 ' default use 32 for the hardware stack $swstack = 10 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Enable Interrupts 'Enable Interrupts Config Serialin = Buffered , Size = 20 Config Serialin1 = Buffered , Size = 20 Print "test uart 1" 'to jest pierwszy serial innaczej 0 ' pierwszego nietrzeba otwierac wiec piszesz tylko print ' drugi musisz otworzyc czyli piszesz open jak nizej Open "COM2:" For Binary As #2 Print # 2 , "test uart 2" ' to jest drugi serial innaczej 1 ' ^ ^ ' | |____tu tez spacja ' |_____tu spacja 'ps. wycięte z helpa i troszkę zmienione
chyba wszytko jasne
pzdrawiam

Fredy
-
-
Posty: 141
Rejestracja: 27 mar 2005, o 21:45
Lokalizacja: Małopolska

Postautor: Fredy » 26 kwie 2009, o 12:32

dzięki za odpowiedz.

A wiesz może jak można zastosować funkcję ISCHARWAITING do drugiego uarta?

Bo próbuje wszystkie kombinacje np Ischarwaiting #2 i mi nie dziala.

I jeszcze jedno - w tym przykładzie co mi podałeś jaką prędkość bedzie miec UART 2?
Chyba można zastosować do okreslenia jego prędkości Baud #2?

Awatar użytkownika
pikczu
-
-
Posty: 89
Rejestracja: 5 paź 2003, o 19:55
Lokalizacja: Dublin
Kontaktowanie:

Postautor: pikczu » 26 kwie 2009, o 12:41

prędkość 9600
Sprawdź sample w bascomie tam jest folder serial przeglądnij może znajdziesz
Jeśli nie później po kombinuje :)

Fredy
-
-
Posty: 141
Rejestracja: 27 mar 2005, o 21:45
Lokalizacja: Małopolska

Postautor: Fredy » 26 kwie 2009, o 12:46

ale jak chce aby oba uarty pracowaly na róznych predkościach to chyba trzeba ustawić Baud #2 predkosc tego drugiego.
Ciekaw jestem czy ten Ischarwaiting dziala do drugiego uartu

Awatar użytkownika
pikczu
-
-
Posty: 89
Rejestracja: 5 paź 2003, o 19:55
Lokalizacja: Dublin
Kontaktowanie:

Postautor: pikczu » 26 kwie 2009, o 13:29

Musi działać
Prędkość możesz zmienić konfigurując drugi uart
Zobacz na ten folder co Ci podałem w samplach tam jest dokładnie co potrzebujesz

Kod: Zaznacz cały

'----------------------------------------------------------------------------------------- 'name : rs232buffer1.bas 'copyright : (c) 1995-2005, MCS Electronics 'purpose : shows the difference between normal and buffered ' serial INPUT 'micro : Mega161 'suited for demo : yes 'commercial addon needed : no '----------------------------------------------------------------------------------------- $regfile = "m2560def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $hwstack = 40 ' default use 32 for the hardware stack $swstack = 40 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space ' Works only for chips with 2 UARTS or more Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'first compile and run this program with the line below remarked 'Config Serialin1 = Buffered , Size = 20 'dim a variable Dim Nm As String * 5 Open "com2:" For Binary As #1 'the enabling of interrupts is not needed for the normal serial mode 'So the line below must be remarked to for the first test Enable Interrupts Print #1 , "Start" Do If Ischarwaiting(#1) = 1 Then 'was there a char? Nm = Waitkey(#1) 'get it Print #1 , Nm 'print it End If Wait 1 'wait 1 second Loop Close #1 'You will see that when you slowly enter characters in the terminal emulator 'they will be received/displayed. 'When you enter them fast you will see that you loose some chars 'NOW remove the remarks from line 11 and 18 'and compile and program and run again 'This time the chars are received by an interrupt routine and are 'stored in a buffer. This way you will not loose characters providing that 'you empty the buffer 'So when you fast type abcdefg, they will be printed after each other with the '1 second delay

Fredy
-
-
Posty: 141
Rejestracja: 27 mar 2005, o 21:45
Lokalizacja: Małopolska

Postautor: Fredy » 26 kwie 2009, o 19:36

Wielkie dzięki.
Bascom jest wielki :607:


pozdrawiam

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

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 20 gości