Kappler
Geowizard
Zunächst mal kannst du in beiden IF-Abfragen den ELSE-Zweig weglassen:
Wenn die Taste gedrückt wird, soll ins Unterprogramm verzweigt werden, wenn die Taste ruht, dann soll nichts passieren.
Dann auf jden Fall den Start Adc weglassen. Das startet eine Analog-Digital-Wandlung, die du gar nicht brauchst und die auch gar nicht näher initialisiert ist. Keine Ahnung, was so passiert...
In den Unterprogrammen auf keinen Fall alle Bits von Portb setzen, sondern nur das Bit, dessen zugehörigen Ausgang du setzen willst. Sonst schaltest du bei den Eingängen die Pullup-Widerstände, die du zuvor mühsam gesetzt hast, wieder aus.
Also z.B. Portb.3 = 1
Also folgendermaßen:
Und wenn das alles funktioniert und du es soweit verstanden hast, kannst du dir mal For...Next Schleifen anschauen, das macht das Leben in einigen Bereichen viel einfacher, bei dir insbesondere die Unterprogramme A und B übersichtlicher
Wenn die Taste gedrückt wird, soll ins Unterprogramm verzweigt werden, wenn die Taste ruht, dann soll nichts passieren.
Dann auf jden Fall den Start Adc weglassen. Das startet eine Analog-Digital-Wandlung, die du gar nicht brauchst und die auch gar nicht näher initialisiert ist. Keine Ahnung, was so passiert...
In den Unterprogrammen auf keinen Fall alle Bits von Portb setzen, sondern nur das Bit, dessen zugehörigen Ausgang du setzen willst. Sonst schaltest du bei den Eingängen die Pullup-Widerstände, die du zuvor mühsam gesetzt hast, wieder aus.
Also z.B. Portb.3 = 1
Also folgendermaßen:
Code:
$hwstack = 20 'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny13.DAT"
$crystal = 128000 'Frequenz des internen Oszillators
Config Portb = &B00011000 'Pinb.4+3 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = &B00000110 'Ausgänge auf Low setzen
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen
Wdtcr = &B11010011 'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts 'Interrupts freigeben
Do
Reset Watchdog
Powerdown
If Pinb.1 = 0 Then
Gosub A
End If
If Pinb.2 = 0 Then
Gosub B
End If
Loop
A:
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Reset Watchdog
Powerdown
Portb.3 = 1
Reset Watchdog
Powerdown
Portb.3 = 0
Return
B:
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Reset Watchdog
Powerdown
Portb.4 = 1
Reset Watchdog
Powerdown
Portb.4 = 0
Return
End
Und wenn das alles funktioniert und du es soweit verstanden hast, kannst du dir mal For...Next Schleifen anschauen, das macht das Leben in einigen Bereichen viel einfacher, bei dir insbesondere die Unterprogramme A und B übersichtlicher