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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hans D. (hansda)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von Falk B. (falk)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Stellt ihr euch heute doof, oder seid ihr ...?

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]
  • [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.