mikrocontroller.net

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


Autor: Jan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hubert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.