Hallo Gemeine,
ich bin neu. Martin mein Name. Versuche gerade mittels Uart meinen
ATmega8151 16Mhz zu steuern. Verwende GCC und Avr Studio. Mein Prgramm
soll wenn es ein Steuerzeichen "#" bekommt abhängig von den nächsten
drei Zeichen etwas unternehmen. Das Klappt auch, jedoch nur, wenn ich
den _delay drin lasse. Wenn ich es raus nehme, erkennt er zwar noch das
steuerzeichen, jedoch nicht mehr die weiteren. Verwende die uart.h von
Peter Fleury.
Vielen Dank bei der Hilfe.
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
#include "uart.h"
#define UART_BAUD_RATE 9600
int main(void)
{
char c, tmp[3];
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
sei();
DDRD = (1<<PD5);
PORTD = (1<<PD5);
while(1)
{
c = uart_getc();
_delay_ms(1);
//uart_puts("warten\n");
if(c == '#'){
//tmp = "0";
uart_puts("erkannt\n");
for(int i=0; i<=2; i++){
tmp[i] = (char)uart_getc();
}
if(tmp[0] == '0'){
PORTD = (0<<PD5);
uart_puts("LED an\n");
} else if(tmp[0] == '1'){
PORTD = (1<<PD5);
uart_puts("LED aus\n");
} else {
uart_puts("nichts\n");
}
}
}
Hallo Martin, frag doch mal die Returncodes ab. Wahrscheinlich kommt UART_NO_DATA, wenn Du das delay rausnimmst. Viel Erfolg, MartinBe
hm könnte sein. Das würde dann wohl an der Übertragungsgeschwindigkeit von 9600 baud liegen. Sprich ich frage schneller ab, es kommt aber nichts neues -> da '#' erkennt er zwar, aber nicht das nächste Zeichen, weil es noch garnicht kommt. (macht Sinn)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.