Da findet der Linker die rs232.c nicht. Ich kenne WINAVR nicht, aber wahrscheinlich hast du ein makefile. Darin musst du die rs232.c eintragen.
Druckbare Version
Da findet der Linker die rs232.c nicht. Ich kenne WINAVR nicht, aber wahrscheinlich hast du ein makefile. Darin musst du die rs232.c eintragen.
Hast du überhaupt schon mal deine Hardware, also Pegelwandler, Kabel, Schnittstelle am PC, überprüft? Da kann nämlich auch noch was schieflaufen, denn dein Code läuft bei mir ja. Gerade weil du schreibst, du hättest das Kabel selbstgebaut.
Also:
-> AVR aus dem Sockel entfernen
-> Im Sockel mit einem Draht RXD auf TXD brücken
-> Am PC ein Terminalprogramm aufmachen, ein paar Zeichen senden. Sie müssen genauso wieder reinkommen, und wenn du die Brücke aus dem Sockel entfernst, darf nichts mehr kommen.
Bitte Ergebnis posten!
Oh Freunde. ich habe ein 'a' oder g oder was ich will.
@ uwegw:
Wie du in meinem ersten Beitrag lesen kannst habe ich dies schon ausprobiert.
"ERFOLGREICH"
Habe mir gerade nen anderes STK200 ausm Schrank genommen und ausprobiert.
Man sollte es nicht glauben aber es geht.
KP was an dem anders ist, denn auch nach intensiver Prüfung und Diskussion mit meinem Ausbilder finde ich keine Unterschiede.
Auf jeden Fall Danke ich euch sehr für die große Hilfe,
Hey ich bin's schon wieder.
könnte mir einer von euch erklären wie ich genau die "uart_getchar()" Funktion nutzen kann.
mein gehacktes siet so aus
int main(void)
/* RS232 einschalten ... */
setup_uart();
/* Willkommensnachricht senden ... */
uart_putline("\x1b[1H");
uart_putstring("\r");
uart_putchar('E');
while (1)
{
c = uart_getchar();
uart_putstring("\n\n\r drueck g");
if(c=='g'){
uart_putstring("\n\n\rhallo");}
else
uart_putstring("\n\n\rtschuess");
{
return 0;
}}}
Entprellen oder so muss ich hier ja woll nicht, oder??????
hab es schon mit Zeitschleifen versucht um das ich halt mehr zeit habe für die eingabe, wars anscheinend auch nicht.
THX SebZilla
Bekommst du überhaupt ein Zeichen?
Dein Kompiler wirft keinen Fehler oder Warnung aus?
c ist nicht deklariert.
Ja leider kann ich das hier zu hause kein ozi.
Mein compiler sagt alles i.O.!
Ah, "c" ist als unsigned char definiert.
Wozu brauchst du immer noch nen Oszi?
uart_getchar() liefert aber keinen unsigned char, sondern einen int!!! Das hat folgenden Grund: so kann signalisiert werden, dass kein neues Zeichen empfangen wurde. Dann ist der Rückgabewert nämlich -1. Wenn man nun also auf ein Zeichen wartet, macht man folgendes: in einer Schleife ruft man immer wieder uart_getchar() auf, solange bis keine -1 mehr zurückkommt. Dann steht im gelesenen int das Zeichen, und man kann es in nen char casten und weiterverarbeiten.
Code:int c;
while (1)
{
uart_putstring("\n\n\r drueck g");
do{
c = uart_getchar();
} while (c==-1);
if((char)c=='g'){
uart_putstring("\n\n\rhallo");}
else
uart_putstring("\n\n\rtschuess");
}
THx @uwegw
Werde das morgen aufer arbeit mal weiter verfolgen:
Habe inzwichen auch eine Eingabe hinbekommen, aber brauche das schon als char damit ich es mit den anderen vergleichen kann.
Wünsche noch einen schönen Abend.
int tmp;Zitat:
Zitat von SebZilla
char c;
do{
tmp = uart_getchar();
} while (tmp==-1);
c=(char)tmp
Ist es eigentlich möglich mit einer der "uart funktionen" die ich verwende, direkt einer Variable auszugeben????
Momentant gebe ich die Zeit die eingelesen wird
über einer switch Anweisung aus
Beispiel:
iMin_einer = (hilf_1 + hilf_2 + hilf_4 + hilf_8);
switch("%c", iMin_einer)
{
case 0x00:
uart_putstring("0");
break;
case 0x01:
uart_putstring("1");
break;
case 0x02:
uart_putstring("2");
break;
case 0x03:
uart_putstring("3");
break;
case 0x04:
uart_putstring("4");
break;
case 0x05:
uart_putstring("5");
break;
case 0x06:
uart_putstring("6");
break;
case 0x07:
uart_putstring("7");
break;
case 0x08:
uart_putstring("8");
break;
case 0x09:
uart_putstring("9");
break;
default:
uart_putstring("default");
break;
}
funktionieren tut es ja aber besonder elegant ist das ja nicht.