Hallo Leute, ich habe ein kleines Problem mit einem Programm. Ich soll ein Programmm schreiben, bei dem der Arduino über die USART einen analogen Kanal empfängt. Der Digitalwert soll dann wieder über USART züruckgesendet werden. Die Ablauffunktion soll in der ISR realisiert werden. Konfig. der USART soll 8N1 sein mit der Baudrate 115200. Der interne ADWandler soll die internen 5V als Referenzspannung verwenden. Mein Ansatz wäre hier dazu: " void usart_init(void); void adc_init(void); int main() { usart_init(); adc_init(); sei(); while (1) {} } ISR(USART_RX_vect) { } adc_init() { //lösche alles ADMUX = 0; ADCSRA = 0; //Kanal0 automatisch //Wandlungsteiler auf 128 ADCSRA |= (1 << ADPS2); ADCSRA |= (1 << ADPS1); ADCSRA |= (1 << ADPS0); // ADCSRA |= (1 << ADEN); ADCSRA |= (1 << ADATE); ADMUX |= (1 << REFS0); //freilaufend bereits eingestellt ADCSRA |= (1 << ADSC); while (ADCSRA & (1 << ADSC)); uint16_t ADC_wert = ADC; } usart_init() { #define F_CPU 16000000UL #define BAUD 115200UL #define TEILER F_CPU/16/BAUD-1 //lösche alles UDR0 = 0; UCSR0B = 0; UCSR0C = 0; UBRR0 = TEILER; //Disabled Paritätsbit bereits eingestellt //Asynchron Usart bereits eingesstellt //8 Datenbits übertragen UCSR0C|= (1 << UCSZ01); UCSR0C|= (1 << UCSZ00); //1Stopbit bereits eingestellt } " Kann mir hier jemand Hilfestellungen geben ?
Hm, hast du irgendwelche grundlegenden Kenntnisse von dem, was du hier machen sollst (also nicht willst ;))? Aus meiner Sicht, ist die Aufgabe unklar formuliert und die paar Zeilen haben eine harten Gutenberg-Style.
Zuerst beantworte Dir selbst folgende Fragen: Wird die Kommunikation auf dem seriellen Port in Binärform oder in menschen-lesbarem Text stattfinden? Wo ist der Unterschied? Woran erkennst du beim Empfang der Kanalnummer, dass die Eingabe beendet ist? Wie wandelt man den Integer Messwert des ADC in Text um? Wie initialisiert man die serielle Schnittstelle? Fange dabei einfach an = ohne Interrupts? Wie berechnet man den Teiler für die Baudrate (Kleiner Tipp: setbaud.h)? Wie stellt man die tatsächliche CPU Frequenz ein (Fuses und Clock Prescaler)? Wie teilt man dem Compiler die CPU Frequenz richtig mit? Jedenfalls nicht so, wie du es dort gemacht hast. Wie sende man ein Zeichen? Wie empfängt man ein Zeichen? Wie muss der ADC initialisiert werden? Fange auch wieder einfach an = ohne Interrupts. Wie bringt man den ADC Dazu, eine Messung durchzuführen? Wie liest man das Ergebnis der Messung aus? Arbeite Dich Schritt für Schritt voran. Große Aufgaben immer in kleine zerlegen.
@ Hans Dampf (hansda) >Hallo Leute, ich habe ein kleines Problem mit einem Programm. Ich soll >ein Programmm schreiben, bei dem der Arduino über die USART einen >analogen Kanal empfängt. Wirklich? Das glaube ich eher nicht. > Der Digitalwert soll dann wieder über USART züruckgesendet werden. Wozu? >Die Ablauffunktion soll in der ISR realisiert werden. >Konfig. der USART soll 8N1 sein mit der Baudrate 115200. >Der interne ADWandler soll die internen 5V als Referenzspannung >verwenden. Wozu ein AD-Wandler, wenn doch dein Wert vom UART kommt und an den zurückgesendet werden soll?
Was soll das Gezweifele? Er SOLL ein Programm schreiben. Das heißt: Die Aufgabenstellung stammt von einem Idioten, der sich widersprechende Forderungen an den TO stellt. Aufgabe ist nun, dem o.g. Idioten die Frage zu stellen, ob er das Problem in seiner eigenen Aufgabenstellung erkennt. Falls nicht -> erledigt.
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.