www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit eingebundener 232.h -> Undefined Reference


Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich bin grade dabei, ein Kleines Testprogram zu schreiben, daß mir 
einmal den status von PortA an den Rechner schickt, und einmal das vom 
Rechner empfangene auf PortB ausgibt.
Dazu habe ich eine RS232.h mit #include angehängt.
Solange ich nur vom Controller zum PC sende funktioniert alles.
Wenn ich aber die Funktion USART_RX noch aufrufe, kommt die Meldung 
"imlizite Deklaratien" und dann "undefined reference"...

Hier der Code
#include <avr/io.h>
#include <avr/delay.h> 
#include "RS232.h"

//#define F_CPU 3686400 

int Data, rec;

int main(void)
  {
  DDRA=0x00;
  DDRB=0xff;
  USART_Init(MYUBRR);
  uart_puts("Das ");  
  uart_puts("ist ");
  uart_puts("ein ");
  uart_puts("Test ");
  for(;;)
  {
  Data=PINA;
  var_out(Data);
  uart_puts("PORTA: \r\n");
        rec = USART_Rx();
  PORTB=rec;
  }
  }

Und hier das 232-h
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+RS232 Headerdatei zur Terminalkomunikation mit dem PC         +
//+Datum: 30.11.06                   +
//+Autor: Kai Lindermeier                        +
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
#define BAUD 9600        // Baudrate festlegen
#define MYUBRR F_CPU/16/BAUD-1      // Formel zur UBRR-Berechnung
 
 
void USART_Init( unsigned int ubrr);    // Initialisierungs Fkt. der Uart
void USART_Transmit( unsigned char data );  // ein Zeichen sende Fkt.
void uart_puts (char *s);      // String sende Fkt.
void var_out (int16_t varout);      // Variablen sende Fkt.
uint8_t Usart_Rx(void);
 
//======================================================================
// Wert von Variable senden
//======================================================================
void var_out (int16_t varout)
{
  char varoutp[7];                    // char array 
  uart_puts( itoa( varout, varoutp, 10 ) );  // itoa = Integer to ASCII
}
 
 
//======================================================================
// String senden
//======================================================================
 
void uart_puts (char *s)
{
  while (*s)          // so lange *s != '\0' 
 
    { 
      USART_Transmit(*s);
      _delay_ms(1);        // timing, kurze pause
      s++;
    }
}
 
//======================================================================
// RS232 Init 9600/8/2
//======================================================================
 
void USART_Init( unsigned int ubrr)
{
  /* Baudrate setzen */
  UBRRH = (unsigned char)(ubrr>>8);
  UBRRL = (unsigned char)ubrr;
 
  /* RX/TX einschalten */
  UCSRB = (1<<RXEN)|(1<<TXEN);
 
  /* Datenformat setzen: 8data, 2stop bit */
  UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
 
//======================================================================
// ein Zeichen senden RS232
//======================================================================
void USART_Transmit( unsigned char data )
{
  /* auf leerem TX Buffer warten */
  while ( !( UCSRA & (1<<UDRE)) )
    ;
  /* Daten in den Speicher legen und senden */
  UDR = data;
}
 
 
//====================================================================================
// UART: ein Zeichen einlesen
 
uint8_t Usart_Rx(void)
{
  while (!(UCSRA & (1<<RXC)));  // warten bis Zeichen verfuegbar
  return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}
 
 

Kann mir da jmd helfen, bin noch nicht so fit in der ganzen Geschichte.
Grüße
Phil

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
USART_Rx() ist nicht gleich Usart_Rx().

Falsch geschrieben einfach ;)

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autsch, wie blöd lol
Jetzt kommt zumindest keine Fehlermeldung mehr.
Jetzt habe ich ein neues Problem: Ich habe (STK500) den PortB an die 
LEDs angeschlossen.
Wenn ich initialisiere leuchten alle (0x00 mit Pull-Up). Soweit korrekt.
Aber egal was ich jetzt sende (mit Advanced Serial Port Monitor 3.7.0), 
es geht die LED0, LED2 und LED3 aus, bei weiterem senden Blinken diese 
einemal kurz, die restlichen bleiben an...Ne idee?
Ich sende immer nur einstellige Zahlen.

Edit: Ich depp, lag daran daß der Port-Monitor am ende jeder Übertragung 
das zeichen CR (dezimal: 13) anhängt, das natürlich dann immer am ende 
dranhängt...
Jaja, so lernt man Schritt für Schritt

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, da ich wahrscheinlich in Zukunft immer wieder mal ne Frage haben 
werde, stelle ich am besten hier mal mein Projekt vor, dann muß ich 
nicht immer nen neuen Thread eröffnen.

Ich studiere an der HS Bremen im 5. Semester Luftfahrtsystemtechnik, 
eine Art "Allround-Studiengang" in Engineering mit etwas Management, BWL 
etc, als duale Ausbildung mit einer Pilotenausbildung.
Ich leite nun ein Projekt zum Bau eines Fix-Based Flugsimulators als 
Procedure-training-Device.(also ohne Hydraulikstelzen, keine Bewegung 
der Hülle).
Eine meiner Aufgaben besteht darin, die diversen Schalter und 
Kontroll-leuchten auszulesen bzw. anzusteuern.
Dazu möchte ich jedes der Panels ( als Beispiel 
http://www.airliners.net/open.file/1192850/M/ ) als eigenes Gerät 
aufbauen, mit jeweils einem Atmega8535 der die Hardware 
ansteuert/Ausliest und das ganze dann per TWI an einen Master-controller 
verschickt der wiederum über RS232 UART mit dem zuständigen PC 
kommuniziert.

Die erste Frage ist, wie groß diese Daten insgesammt maximal werden 
dürfen, bevor ich ein Speicherproblem im Mastercontroller bekomme,  der 
ja alles was von den Panels kommt quasi "sammelt" und als ein 
Datenstring an den PC sendet, sowie den String vom PC bekommt und an die 
Panels weitergibt.

Grüße
Phil

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.