Probier mal den:
sollte mit einen ATtiny2313 auch gehenCode:'ADC03.BAS: Vereinfachter A/D-Konverter mit Nutzung der internen PullUps 'Benötigte Hardware: ' - Nullmodemkabel zum PC für die Datenausgabe ' - Pin PB0/Ain2: 3,9 nF nach Masse (0...244 ==> 0,58mV...4,9V) ' - Pin PB1/Ain1: Mit Poti verbinden (Analoges Eingangssignal) '----------------------------------------------------------------------------------------------------------------------------- $regfile = "2313def.dat" 'AT90S2313-Deklarationen $crystal = 3686400 'Verwendeter Quarz: 3.6864 MHz $baud = 1200 'Datenausgabe zum PC mit 1200 Baud ' Config Aci = On , Compare = Off , Trigger = Rising 'Komparator im an steigender Flanke, keine Verbindung mit Timer1 Config Timer0 = Timer , Prescale = 8 'Timer-Betrieb, Clock/8: Nach (1/3,6864MHz)*8*256 = 555 Mikrosekunden Überlauf ' On Aci Oncomparator 'Interrupt-Routine für Komparator (Ende einer AD-Wandlung wegen normalem Ende der Messung) On Timer0 Onoverflow 'Interrupt-Routine für Timer0 (Ende einer AD-Wandlung wegen Überlauf) ' Dim Poti As Byte 'Die Variable Poti enthält stets den aktuellen Annalog-(Poti-)-Wert '----------------------------------------------------------------------------------------------------------------------------- Enable Timer0 'Timer0-Overflow-Interrupt einschalten (initialisiert auch die erste Messung) Enable Interrupts 'Interrupts global zulassen Do 'Hauptschleife Printbin Poti 'UART-Datenausgabe Loop '----------------------------------------------------------------------------------------------------------------------------- Onoverflow: 'Timer0-Overflow-Interrupt: Ende Entladen (oder zu hohe Spannung) Enable Aci Ddrb.0 = 0 'Laden starten: Pin PB0/Ain2 auf Eingang... Portb.0 = 1 '...und PullUp einschalten Timer0 = 0 'Timer0 zurücksetzen, Ende der Messung bei Komparator-Interrupt (oder Timer-Überlauf) Return '----------------------------------------------------------------------------------------------------------------------------- Oncomparator: 'Komparator-Interrupt: AD/Wandlung beendet Poti = Timer0 - 16 'Timer0-Wert holen und Interrupt-Zeit abziehen Disable Aci Portb.0 = 0 'Entladen: Pin PB0/Ain2 auf 0 Volt... Ddrb.0 = 1 '...und auf Ausgang Timer0 = 254 'Entlade-Ende bei Überlauf (hier nur relativ wenige Takte nötig, da Entladen nicht über Widerstand) Return
Wigbert







Zitieren

Lesezeichen