Forum: Mikrocontroller und Digitale Elektronik AVR ATmega 328P; USARTprogramm


von Hans D. (hansda)


Lesenswert?

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 ?

von ich (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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?

von Armlanger Abstandshalter (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

Stellt ihr euch heute doof, oder seid ihr ...?

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
Noch kein Account? Hier anmelden.