Hallo Kenner des Fachs ! Ich habe in einem grösserem Projekt mit serieller Ausgabe der Werte , Probleme mit der ADC Abfrage...Neben der Zeitabfrage,mit TWI/DS1307,Temperaturmessung mit 1-Wire DS18B20, benötige ich eine ADC Umwandlung für eine Füllstandsmessung. Nun Habe ich ein Problem, dass, wenn ich die ADC Funktion aktiviere, die RTC Afrage oder(?) die serielle Ausgabe versagt. Ich hab den Code auf meinem Webspace als Zip gelegt: (es ist ein AVR-Studio 4.xx Projekt) http://oderlachs.de/forum/ATM_16_Clock.zip Hier ist nur RTC, USART und ADC bislang eingebunden.. Vielleicht schaut es sich mal wer an und kann mir helfen..irgendwie hab ich da "Brett vorm Kopf" ;) Gruss & Danke Gerhard Ich hoffe das ich alles gut kommentiert habe im Code
> UCSRB = (1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
RX Interrupt freigeschaltet ohne einen Interruptvektor
im Programm. Da muss man sich über komisches Verhalten
nicht wundern.
Danke für den Hinweis, muss mich da bestimmt versehen haben beim Tippen , werde nochmals nachlesen was ich da schreiben muss... Habe nochmals die Zip aktualisiert und hoch geladen, weil da fehlte ja noch was...aber nun egal muss ja den Fehler erst ausbügeln... ;) Gruss und dank Gerhard
In Free Running mode, a new conversion will be started immediately after the conversion completes, while ADSC remains high. Das ist dein Problem.
Danke Dir ...muss nur noch sehen wie ich das in meinen deutschen Kopp bekomme, das English ist bei mir sehr mangelhaft, hatte Russisch lernen müssen(!) Gruss Gerhard
Auf Deutsch: vergiss doch bitte den Free Running Modus. Den braucht keiner! Deine Start_ADC Funktion sieht doch auf den ersten Blick nicht schlecht aus. Wird die Funktion aufgerufen, dann startet sie den ADC, wartet bis der fertgi ist und liefert das Ergebnis. Wozu brauchst du da noch einen Free Running Modus? Das Problem ist in deiner Funktion der Teil "Warten auf das Ergebnis". Diese Abfrage funktioniert im Free Running Modus nicht. Denn in diesem Modus wird der ADC nie "fertig". Sobald er ein Ergebnis hat, startet er die nächste Wandlung. Wenn du also den ADC abfragst, dann meldet der pflichtbewusst: Ich buddle (noch). Woraufhin deine Start_ADC darauf wartet, das der ADC sich mal melden würde "So, isch haben fertig". Nur passiert das eben nie. Vergiss den Free Running Modus. Den braucht man nur ganz selten und nur dann, wenn es wirklich wichtig ist, dass man so schnell wie möglich und so kurz hintereinander wie möglich Messwerte kriegt. Aber dann muss man das ganz anders programmieren (mit Interrupts). In deinem Beispiel bringt dir Free Running genau gar nichts.
Karl Heinz schrieb: > vergiss doch bitte den Free Running Modus. Den braucht keiner! Schon das zweite Mal in fünf Jahren, daß ich Dir widersprechen muß :-). Ich finde den total nützlich, wenn ich eine möglichst schnelle Regelung implementieren will. Dann stellt der ADC-Interrupt auch direkt den Systemtimer, aus dem alle anderen periodischen Funktionsaufrufe "herausgeteilt" werden. Aber das war OT. Für das Beispiel oben taugt der wirklich nicht.
Euch Allen sag ich vielen herzlichen Dank für alle Hinweise !! Ich werde mal alle Hinweise berücksichtigen...und weiter versuchen. Ich arbeite nach dem Buch von Sven Feldkord : "Einführung in die C_Programmierung mit dem ATMega32"...danach habe ich meine Beispiele ausgearbeitet. Natürlich habe ich auch die ATMEL-Datenblätter verwendet, da sind ja auch Codebeispiele drinnen..nur eben die englische Beschreibung verstehe ich nicht immer so ganz.. Danke und Gruss Gerhard
Hier ... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Analoge_Ein-_und_Ausgabe ... findest du ADC Funktionen. Die sind für mindestens 95% aller Fälle mehr als ausreichend.
Vielen Dank Heinz ! Kann sein das mein flüchtiger Speicher im Kopf wieder was durcheinander gebracht hatte, ich habe noch mals die Funktionen/Routinen aus meinem "Lehrbuch" für Init_ADC und Start_ADC genommen und nun klappt es mit der ADC-Messung, der SerienAusgabe und dem TWI-RTC. Die Auwertung befindet sich noch im Debug/Testmodus noch mit LEDs auf dem STK500. ich habe nochmals den neuen Code auf meinen Webspace geladen zur allgemeinen Kontrolle und Begutachtung. Gewiss gibt es noch was zu Verbessern, aber ich lerne ja noch... Hier der Code : http://oderlachs.de/forum/ATM_16_Clock_ADC.zip ja für mich ist es furchtbar immer wieder längere Pausen zwischen dem Programmschreiben machen zu müssen..da die Speicherbatterie im Koppe nicht mehr so OK ist.. ;) Vielen Dank , es hat mich besonders die rege Beteiligung an den Hinweisen gefallen. Das ist positiv fürs Forum, auch wenn ein gewisser Gast, unrühmliche Worte schrieb, die der Mod (Danke !!) schnell entfernt hatte. Gruss Gerhard
Karl Heinz schrieb: > vergiss doch bitte den Free Running Modus. Den braucht keiner! Nö, der ist schon ganz praktisch. Wenn man nur einen Eingang braucht, dann startet man ihn einfach als free-running. Fürderhin muß man nichts mehr machen, einfach nur das ADCW lesen, wann man lustig ist.
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.