mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Praxis klappt, Theorie nicht :( UART AMTEGA328P Dringend!


Autor: Mr.Unsigned (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo liebe Gemeinde, ich habe ein großes Problem.

Der Code läuft prima und alle Werte funktionieren. Aber in der Theorie 
haut das irgendwie nicht hin... und die gilt es zu beweisen:(

FCPU:   9.216MHz

Uart: Baud 230.4k, 8N1

/*Einstellung der UART-Kommunikation*/
void USART_init(void){
    UCSR0A = (1<<U2X0);                 //Double Speed Modus
    UBRR0H = (uint8_t)(4>>8);           //Prescaler
    UBRR0L = (uint8_t)(4);              //Prescaler
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);     //Aktivieren Receiver und 
Transmit-ter
    UCSR0C = (3<<UCSZ00);               // Asynchron, 8N1

}



ISR wird aufgerufen in 9k6 Hz durch Timer0CompareMatch,

ADC autogetriggert an den Timer0,



void adc_init(void){

    ADMUX |= ((1<<REFS0)|(1<<REFS1));   //Intern AREF(1V1)
    ADMUX |= (1<<ADLAR);                //Left Adjusted
    ADCSRA |= (1<<ADEN);                //ADC aktivieren
    ADCSRA |= (1<<ADPS2);               //9.216Mhz/16 = 576Khz the ADC 
refe-rence clock, in 13 Zyklen: 44 kHz.
    ADCSRA |= (1<<ADSC);                //Probewandlung, da die erste 
falsch ist
    ADCSRA |= (1<<ADATE);               //Enable Autotrigger
    ADCSRA |= (1<<ADIF);                //Interrupt Flag; Data register 
is updated
    ADCSRB |= (1<<ADTS1)|(1<<ADTS0);    //Autotrigger Timer0/Counter 
Compare Match A



}

Prescaler 16 = 576KHz mit 13 Takte für eine Wandlung wären das =44.30 
KHz

somit dauert eine AD-Wandlung : 1/44.30Khz= 0.0225ms

Für 2 mal 8-bit Werte senden (1 start, 8 Bit, 1 Stopp) =

benötigte Zeit: 20/230.4k = 0.0868ms

mein switch-Case bzw. Interrupt erfolgt im 9k6Hz.

also liegt zwischen Case1 und case2.. 1/9k6Hz = 0.1041ms.

Wie kann das sein, dass die Routine trotzdem läuft?

Die Atmegas besitzen ja priorisierter interrupt? Heißt würde trotzdem zu 
ende laufen?

Aber der nächste Interrupt etc.. gemessen mit logic-Analyzer an den 
beiden Messwerten haben immer den gleichen Abstand: 1/9k6Hz :( :( ??

case 1:
while (ADCSRA & (1<<ADSC));
A[0] = ADCH;
UDR0=(A);
UDR0=(A);

break;

Autor: Codeversteher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mr.Unsigned schrieb:
> Hallo liebe Gemeinde, ich habe ein großes Problem.

Ich auch: du kannst nicht richtig lesen oder bist beratungsresistent:

-------------------------------------------
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]
----^^^^^^^^^^^^^^^^^-----

Autor: Dieter F. (jim_quakenbush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mr.Unsigned schrieb:
> Wie kann das sein, dass die Routine trotzdem läuft?

Ja!

(Sinnvolle Antworten erfordern sinnvolle Informationen zur 
Fragestellung)

Autor: Jochen (Gast)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
Langfassung: Wenn Praxis klappt, aber Theorie dem widerspricht, dann 
Theorie falsch.

Autor: Kaj G. (Firma: RUB) (bloody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mr.Unsigned schrieb:
> Die Atmegas besitzen ja priorisierter interrupt?
Datenblatt lesen hilft.

Autor: Mr.Unsigned (Gast)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Entschuldigt bitte mein "forderndes Verhalten", ich stand unter 
Zeitdruck ;)

Habe das Datenblatt gelesen.. Thread darf geschlossen und gelöscht 
werden.

Danke.

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Mr.Unsigned schrieb:
> Thread darf geschlossen .. werden

So macht man das normalerweise

Mr.Unsigned schrieb:
> Thread darf geschlossen und gelöscht werden.

Ist unsinnig. Zuerst schliessen, und dann den geschlossenen Thread 
löschen? Dann könnte man den Thread ja auch direkt löschen.

Aber generell löscht man "sowas" nicht. Das kann immer noch als 
schlechtes Beispiel herhalten.


-> Erst Gedanken sortieren, dann formulieren, dann schreiben.

: Bearbeitet durch User
Autor: Sauer (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo

Wirklich helfen und erklären hilft, auch anderen Neugierigen und 
lernwilligen, das ist der weiter Sinn eines öffentlichen Forum.
Über absolute Nebensächlichkeiten herziehen oder nutzlose allgemeine 
"Tipps" (Datenblatt) bringen wenig.

Ich kann auch keine Antwort geben, das Problem ist nicht akut bei mir, 
aber trotzdem ist es interessant dient allen zur Wissensvermehrung und 
Fehlervermeidung in der Zukunft.

Die Formulierung "...und die gilt es zu beweisen" deutet darauf hin das 
Mr.Unsigned die Info nicht nur aus Langeweile oder Spaß benötigt sondern 
aus einen wichtigen und ernsthaften Grund.
Soll er jetzt  Tage investieren um sich das eventuell selbst zu 
analysieren (und trotzdem nicht sicher sein kann ob es dann korrekt ist) 
wenn es jemand anderes sicher und gut belegbar erklären kann?

Wenn es hier nicht hin und wieder Threads geben würde wo das gemacht 
wird wäre das Forum hier (wohl nicht nur für mich)gestorben.

Sauer

Autor: analPhabet (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Codeversteher schrieb:
>     Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Wat verstehse denn als längeren Sourcecode oda verstehse den nich? Sons 
hasse ja Recht.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn du den ADC mit über 500kHz taktest, darfst du dich über 
merkwürdige Ergebnisse nicht wirklich wundern.

Autor: Klugscheißer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias S. schrieb:
> Und wenn du den ADC mit über 500kHz taktest, darfst du dich über
> merkwürdige Ergebnisse nicht wirklich wundern

Bei 8 Bit-Auflösung nicht.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klugscheißer schrieb:
> Bei 8 Bit-Auflösung nicht.

Man kann den ADC so schnell takten. Aber ein Blick ins Datenblatt gibt 
bei 1MHz ADC Takt eine mögliche Ungenauigkeit von 4,5 Bit an. Das meinte 
ich mit

Matthias S. schrieb:
> merkwürdige Ergebnisse

Da bleibt also ein 5,5 Bit Wandler übrig. Wird bei 500kHz nicht ganz so 
wild sein, aber schön ist anders. Dabei geht Atmel von einer Quelle mit
geringem Innenwiderstand aus, das muss also auch stimmen.

: Bearbeitet durch User

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.