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;
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] ----^^^^^^^^^^^^^^^^^-----
Mr.Unsigned schrieb: > Wie kann das sein, dass die Routine trotzdem läuft? Ja! (Sinnvolle Antworten erfordern sinnvolle Informationen zur Fragestellung)
Langfassung: Wenn Praxis klappt, aber Theorie dem widerspricht, dann Theorie falsch.
Entschuldigt bitte mein "forderndes Verhalten", ich stand unter Zeitdruck ;) Habe das Datenblatt gelesen.. Thread darf geschlossen und gelöscht werden. Danke.
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
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
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.
Und wenn du den ADC mit über 500kHz taktest, darfst du dich über merkwürdige Ergebnisse nicht wirklich wundern.
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.
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
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.