Forum: Mikrocontroller und Digitale Elektronik Uart0 Uart1 initialisieren.


von V2mike (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

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.

von ... (Gast)


Lesenswert?

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);
        ....
        .....
        .......
}

von ... (Gast)


Lesenswert?

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
}

von spess53 (Gast)


Lesenswert?

Hi

Und wie macht man das mit 4 UARTs? Ich habe einen ATmega2560.

MfG Spess

von ... (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>http://www.atmel.com/dyn/resources/prod_documents/...
>Seite 206

Danke.

MfG Spess

von ... (Gast)


Lesenswert?

bidde ;)

von V2mike (Gast)


Lesenswert?

danke erstmal, werd mal testen ob ichs hinbekommm...

von V2mike (Gast)


Lesenswert?

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...???

von sw uart (Gast)


Lesenswert?


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
Noch kein Account? Hier anmelden.