Hey Leute, erstmal frohe Ostern und das ihr auch schön die bunten Eier findet... also mein Problem: im Rahmen eines Projekts mach ich eine Alarmanlage die GPS-Daten via GSM-Netz an den Besitzer senden soll.... leider bin ich im Mikrocontrollerprogrammieren noch ein totaler Anfänger... hier kommt meine Frage: hat jemand eine Beispielprogramm in dem 2 Uart-Schnittstellen initialisiert werden??? (ich verwende einen ATMEGA162) hat vielleicht jemand ein ähnliches Programm, dass ich auf meine Anwendung abändern könnte....? leider läuft mir die Zeit davon und will das Projekt noch zum laufen bekommen, wäre klasse von euch wenn ihr mir da ein bisschen unter die Arme greifen könntet... Daten: Atmega162,Sim548c(gps-gsm-modul) auch 2 uart-Schnittstellen... danke im Vorraus
V2mike schrieb: > Hey Leute, > hier kommt meine Frage: > > hat jemand eine Beispielprogramm in dem 2 Uart-Schnittstellen > initialisiert werden??? (ich verwende einen ATMEGA162) Die werden auch nicht anders initialisiert als bei einem Prozessor der nur eine UART hat. Die Register bzw. die zu setzenden Bits heißen ein wenig anders, weil die Nummer der UART im Bitnamen mit enthalten ist. Aber das ist dann eigentlich schon der ganze Unterschied. Ein bischen Datenblattstudium und Funktionen die mit einer UART umgehen können und ein paar Minuten bis Stunden später (je nach Vorkenntnisse) sollte das eigentlich laufen.
z.B. [c] void uart0_init(int BaudRate) { int ubrr0 = (F_CPU 16 BaudRate - 1); // Baudrate UART0 einstellen UBRR0H = (unsigned char)(ubrr0>>8); UBRR0L = (unsigned char)ubrr0; UCSR0C = (1<<URSEL0)|(3<<UCSZ00); // UART0 Frame Format einstellen: 8data, 1 Stop-bit, keine Parity UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1 << RXCIE0); // UART0 Receiver und Transmitter einschalten } void uart1_init(int BaudRate) { int ubrr1 = (F_CPU 16 BaudRate - 1); // Baudrate UART1 einstellen UBRR1H = (unsigned char)(ubrr1>>8); UBRR1L = (unsigned char)ubrr1; UCSR1C = (1<<URSEL1)|(3<<UCSZ10)|(1<<UPM11); // UART1 Frame Format einstellen: 8data, 1 Stop-Bit, even Parity UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1); // UART1 Receiver und Transmitter einschalten } int main() // Hauptprogramm { uart1_init(9600); // USART's initialisieren (Baudrate auf 9600 ) uart0_init(9600); .... ..... ....... }
mmh, eigentlich sollte das so aussehen, sorry:
1 | void uart0_init(int BaudRate) |
2 | {
|
3 | int ubrr0 = (F_CPU / 16 / BaudRate - 1); // Baudrate UART0 einstellen |
4 | UBRR0H = (unsigned char)(ubrr0>>8); |
5 | UBRR0L = (unsigned char)ubrr0; |
6 | |
7 | UCSR0C = (1<<URSEL0)|(3<<UCSZ00); // UART0 Frame Format einstellen: 8data, 1 Stop-bit, keine Parity |
8 | UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1 << RXCIE0); // UART0 Receiver und Transmitter einschalten |
9 | }
|
10 | |
11 | void uart1_init(int BaudRate) |
12 | {
|
13 | int ubrr1 = (F_CPU / 16 / BaudRate - 1); // Baudrate UART1 einstellen |
14 | UBRR1H = (unsigned char)(ubrr1>>8); |
15 | UBRR1L = (unsigned char)ubrr1; |
16 | |
17 | UCSR1C = (1<<URSEL1)|(3<<UCSZ10)|(1<<UPM11); // UART1 Frame Format einstellen: 8data, 1 Stop-Bit, even Parity |
18 | UCSR1B = (1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1); // UART1 Receiver und Transmitter einschalten |
19 | }
|
20 | |
21 | int main() // Hauptprogramm |
22 | |
23 | {
|
24 | |
25 | uart1_init(9600); // USART's initialisieren (Baudrate auf 9600 ) |
26 | uart0_init(9600); |
27 | |
28 | .....
|
29 | .....
|
30 | .....
|
31 | }
|
Hi Und wie macht man das mit 4 UARTs? Ich habe einen ATmega2560. MfG Spess
danke funktioniert soweit... kann mir noch einer verraten wie man daten über uart senden und empfangen kann... bzw habt ihr da vielleicht auch ein kleines beispielprogramm dazu...???
hm, bisschen faul? http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART#Senden_mit_dem_UART
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.