Probier mal den:
Code:
'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
sollte mit einen ATtiny2313 auch gehen


Wigbert