Forum: Mikrocontroller und Digitale Elektronik ATMega128 Uart0


von Müller (Gast)


Lesenswert?

Hallo,

habe ein kleines Problem mit den UART.
Ich möchte an der UART0 Schnittstelle (RX=PE0 TX=PE1) ein GPS Modul 
(navilock 552ETTL)anschließen. Also Atmel RX mit GPS TX verbinden. Das 
ist leider auch die ISP Programmierschnittstelle, der andere UART wird 
leider schon für was anderes benutzt. Da das GPS Modul die Daten 
zyklisch von alleine sendet brauche ich ja nur RX. Das Problem ist halt 
ich empfange nichts.

Ich muß natürlich den Atmel über die ISP-Programmieren können,
kann man die Schnittstelle trotzdem als UART benutzen (Ich meine 
natürlich nicht zeitgleich)?

Wenn Ja, was muss man bei der Fuse Konfiguration beachten?

Ein weiteres Problem ist der Pegel der Atmel wird mit 5V betrieben und 
das GPS Modul hat einen 3,3V Pegel. Braucht man hier einen Pegelwander 
oder geht das auch ohne?


1
#define F_CPU 14745600UL
2
#define GPS_BAUD 38400UL      // baud rate
3
#define GPS_UBRR_VAL ((F_CPU+GPS_BAUD*8)/(GPS_BAUD*16)-1)
4
#define GPS_BAUD_REAL (F_CPU/(16*(GPS_UBRR_VAL+1)))
5
#define GPS_BAUD_ERROR ((GPS_BAUD_REAL*1000)/GPS_BAUD)
6
7
#if ((GPS_BAUD_ERROR<990) || (GPS_BAUD_ERROR>1010))
8
#error Systematischer Fehler der GPS Baudrate groesser 1% und damit zu hoch! 
9
#endif
10
11
#define BV(bit) _BV(bit)
12
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))  // Clear bit
13
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))   // Set bit
14
15
// GPS - UART
16
#define GPS_UART_BAUDRATE 38400
17
#define GPS_UART_DDR      DDRE
18
#define GPS_UART_PORT     PORTE
19
#define GPS_UART_RXPIN    PIN0
20
#define GPS_UART_TXPIN    PIN1
21
#define GPS_RX_vect       USART0_RX_vect
22
23
24
SIGNAL(GPS_RX_vect)
25
{
26
  uint8_t data;
27
  data = (uint8_t)UDR0;
28
  // data parsen....
29
}
30
31
void GPS_Init()
32
{
33
        cli(); // Deaktiviert die Interrupt für die Konfiguration
34
  
35
  // RX - Pin für das Empfangen von Daten
36
  cbi(GPS_UART_DDR, GPS_UART_RXPIN); // Eingang
37
    
38
  // Konfiguriert die Baudrate 38400
39
  UBRR0H = GPS_UBRR_VAL >> 8; 
40
  UBRR0L = GPS_UBRR_VAL & 0xFF;  
41
  
42
  // Aktiviert RX und den RX-Interrupt
43
  UCSR0B = (1<<RXEN0) | (1<<RXCIE);
44
  
45
  // UART Konfiguration: 8N1
46
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);
47
  UCSR0A &= ~(1<<U2X0); //Disable 2x speed 
48
  
49
  sei(); // Aktiviert die Interrupts wieder
50
}

von Timmo H. (masterfx)


Lesenswert?

Müller schrieb:
> kann man die Schnittstelle trotzdem als UART benutzen (Ich meine
> natürlich nicht zeitgleich)?
Ja

> Wenn Ja, was muss man bei der Fuse Konfiguration beachten?
Nein


> Ein weiteres Problem ist der Pegel der Atmel wird mit 5V betrieben und
> das GPS Modul hat einen 3,3V Pegel. Braucht man hier einen Pegelwander
> oder geht das auch ohne?
Für das Empfangen geht auch ohne da der Atmega einen Pegel > 0.6*VCC ja 
auch als High erkennt. Nur solltest du einen Ausgang vom Atmel zum GPS 
Modul nicht direkt anschließen, außer das GPS-Modul hat 5V tolerante 
Pins

von Müller (Gast)


Lesenswert?

Danke für die schnellen Antworten.
Wie könnte man RX am einfachsten anschließen,
reicht da ein Spannungsteiler?

von Timmo H. (masterfx)


Lesenswert?

Den RX vom GPS Modul? Ja Spannungsteiler wäre das einfachste und ist bei 
auch bei höheren Baudraten noch problemlos möglich.

von Müller (Gast)


Lesenswert?

Nee ist natürlich Atmel RX (5V) <-> GPS TX (3,3V).

von Timmo H. (masterfx)


Lesenswert?

Da brauchst du keinen Spannungsteiler. Der Atmel muss ja mindest 3V am 
Pin haben um High zu erkennen. Der umgekehrte Weg braucht ein 
Spannungsteiler, damit das GPS-RX nicht > 3.3V bekommt (außer er ist 5V 
tolerant)

von Müller (Gast)


Lesenswert?

Den Atmel TX (5V) <-> GPS RX (3,3V) brauche ich eigendlich nicht,
deshalb lasse ich den erstmal weg.
Ich probier das Ganze mal aus.

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.