Hallo dariegel,
um zu verstehen, wie das Programm funktioniert, solltest Du unbedingt das Datenblatt zu deinem µC lesen und verstehen.
Ich habe dieses für den Mega32 benutzt: http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf
Dort gibt es das Register ADCSRB für Mega32 nicht - deshalb der Compiler Fehler. In meinem Code wird mit Adcsrb = Adcsrb Or &B00000010 für ATtiny45 der ADC auf Start der Messung durch INT0 eingestellt. Im ATmega32 wird das im SFIOR Register gemacht. Also die Zeile mit ADCSRB raus und die Zeile mit der SIFOR Zuweisung rein.
Zeile ADMUX: Du mußt für Dein RN-Control Board den ADC-Kanal 7, an dem die Tasten angeschlossen sind, an den ADC "anschließen". Das macht Admux = Admux Or &B00000111 auf dem Mega32. Auf meinem ATtiny habe ich einen anderen Kanal genutzt und deshalb sieht das bei mir etwas anders aus.
Noch etwas zum GETADC. Das ist laut Bascom Hilfe zum Ausführen einer Einzelmessung da. Einzelmessung wird in meinem Code nicht genutzt. Der ADC wird auf Start der Messung durch Setzen des INT0 Flags eingestellt. Damit ist GETADC durch den Aufbau des Programms gar nicht sinnvoll und der Meßkanal, der in GETADC übergeben werden muß, muß "manuell" eingestellt werden. Im Simulator kann man nachvollziehen, welche Register im µC durch die entsprechenden Befehle zB CONFIGADC wie gesetzt werden.
Das Programm funktioniert also grob so, daß bei Drücken einer Taste das INT0 Flag gesetzt wird (Signal kommt über die Brücke zu dem entsprechenden µC Pin (PD2) ) Dadurch wird eine ADC Messung getriggert und bei Beendigung der Messung erzeugt der ADC einen Interrupt. In der zugehörigen ISR wird dann der Messwert aus den ADC Registern ausgelesen und steht zur weiteren Auswertung in den entsprechenden Variablen bereit. Weil keine INT0 Interrupt Routine ausgeführt wird, bleibt das INT0 Flag stehen und muß deshalb noch durch Schreiben einer 1 gelöscht werden damit es beim nächsten Tastendruck wieder gesetzt werden kann um die nächste Messung triggern zu können.
Ich möchte nochmal drauf hinweisen, daß das Programm funktioniert aber nicht perfekt ist. Eben nur eine Idee. Liegt an Dir was Du daraus machst oder doch eine andere Lösung verwirklichst.
Nein, nichts vergessen, sondern da gehört das rein, was auch immer Du mit dem Meßergebnis anfangen möchtest - vielleicht auch gar nichts in der ISR und wertest ADC_result zwische DO und LOOP aus.Bei Adc_result sagt der Compiler Unknown statement, hast Du da etwas vergessen?
Ebenso ist der Header mit $HWSTACK nicht vollständig. Die hatte ich nur eingefügt um Dir zu zeigen, das der Wert mit 32 in Deinem Programm zu klein ist.
PS in meinem Code ist Portb.2 und Portb.3 natürlich auch nur für mich zutreffend. Die mußt Du bei Dir auch entsprechend anpassen
Gruß
Searcher
Lesezeichen