Forum: Mikrocontroller und Digitale Elektronik Serielle TTL Schnittstelle an AVR UART


von Jan (Gast)


Lesenswert?

Hallo,

ich mache mal einen neuen Thread auf, da sich meine Problematik etwas
geändert hat.

Ich habe hier einen RFID Lesekopf mit TTL Schnittstelle. Der
funktioniert auch, wie man mit dem oszilloskop gut sehen kann.

Aber diese Schnittstelle gibt am tx ausgang der Schnittstelle konstant
5 V aus solange kein Transponder da ist, und wenn ein Transponder in
reichweite ist, geht die Spannung irgendwie nach unten. Wird irgendwie
falschrum auf die 5V moduliert. So sieht das zumindest aus.

Dann habe ich das mal an das UART meines at90s8535 ankeklemmt und die
UART lib von Peter Fleury bedient. Die sagt aber nur "NO DATA".

Hat da jemand mal eine Idee was ich da falschmache?

Der Code....


#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>

#include "lcd.h"
#include "dual.h"
#include "c:\winavr\lcd\uart.h"

#define XTAL_CPU         8000000      /* 4Mhz */
#define UART_BAUD_RATE      9600      /* 9600 baud */


int main(void)
{

    unsigned int c;
    uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,XTAL_CPU) );
    sei();
    lcd_init(LCD_DISP_ON);
    lcd_free();

    for (;;) {                           /* loop forever */

  c = uart_getc();
  if ( c & UART_NO_DATA )
        {
            lcd_puts("NO DATA");
        }

        else
        {
            /*
             * new data available from UART
             * check for Frame or Overrun error
             */
            if ( c & UART_FRAME_ERROR )
            {
                /* Framing Error detected, i.e no stop bit detected */
                //uart_puts_P("UART Frame Error: ");
              lcd_puts("UART Frame Error: ");

            }
            if ( c & UART_OVERRUN_ERROR )
            {
                /*
                 * Overrun, a character already present in the UART UDR
register was
                 * not read by the interrupt handler before the next
character arrived,
                 * one or more received characters have been dropped
                 */
                //uart_puts_P("UART Overrun Error: ");
    lcd_puts("UART Overrun Error: ");

            }
            if ( c & UART_BUFFER_OVERFLOW )
            {
                /*
                 * We are not reading the receive buffer fast enough,
                 * one or more received character have been dropped
                 */
                //uart_puts_P("Buffer overflow error: ");
    lcd_puts_P("Buffer overflow error: ");

            }
            /*
             * send received character back
             */
            lcd_putc( (unsigned char)c );
        }


  return 0;


     }
}

ICh wäre für JEDE hilfe äusserst dankbar.

Ach ja...

Der lesekopf ist von www.conrad.de Best. Nr. 130078

von Rufus T. Firefly (Gast)


Lesenswert?

Mal 'nen Max232 an das RFID-Teil angeschlossen und an die serielle
Schnittstelle eines PCs gehängt?

So könntest Du zunächst erstmal ansehen, was Dein AVR zu erwarten hat,
und Fehler in der Programmierung der seriellen Schnittstelle
ausschließen.

von Hubert (Gast)


Lesenswert?

Wenn dieses RFID für einen Betrieb an einen PC gedacht ist dann ist der
Pegel verkehrt, also über einen MAX232 zum PC oder einen Inverter zum
AVR probieren.

von Rufus T. Firefly (Gast)


Lesenswert?

Dem muss ich widersprechen.
Wenn das Teil mit einem Max232 an einem PC funktioniert, dann
funktioniert das Teil ohne Inverter an einem Microcontroller. Dann
nämlich ist da auch kein invertiertes Signal.
Es ist ein beliebtes Missverständnis, davon auszugehen, daß irgendwo
ein Signal zu invertieren wäre, nur weil bei V.24-Pegeln -12V einer 1
und +12V einer 0 entsprechen. Diese "Invertierung" ist integraler
Bestandteil des V.24-Treibers, ob der nun ein Max232 oder ein 1488/1489
ist. Erst wenn man sich einen V.24-Treiber oder Empfänger selber basteln
zu müssen meint, muss man sich damit auseinandersetzen.
Auf TTL-Ebene, wie sie von jeder UART verwendet wird, sei sie nun in
einem Microcontroller oder in einem PC verbaut, wird mit normalen
Logikpegeln gearbeitet.
Und die sollte auch das RFID-Modul verwenden.

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.