Autor |
Kleines Problem bei BASCOM Programm |
|
|
|
|
BID = 763659
Offroad GTI Urgestein
Beiträge: 12741 Wohnort: Cottbus
|
|
Hallo,
seit kurzem beschäftige ich mich mal wieder mit Mikrocontrollern - und gleich tauchen Probleme auf.
Nachfolgendes Programm soll eigentlich nur bei einem Tastendruck eine LED schalten. Das klappt aber nicht so ganz.
Das Problem ist, dass das mal funktioniert und mal nicht.
Will heißen: Taster wird betätigt und wieder losgelassen und die LED bleibt an - aber eben nicht immer, mal geht sie auch aus (so wie´s sein soll).
Das Programm ist anscheinend so einfach, dass es schon wieder kompliziert ist...
Falls das hilft: Ich verwende ein fertiges Test-Board mit einem ATMEGA88. Der Eingang des µC wird mittels PullDown Widerstand auf 0V gelegt.
Code : |
$regfile = "m88def.dat"
$crystal = 8000000
Config Portb.6 = Output
Config Portb.7 = Output
Config Portb.1 = Input
Config Portb.2 = Input
Led1 Alias Pinb.6
Led2 Alias Pinb.7
Sw1 Alias Pinb.1
Sw2 Alias Pinb.2
Do
If Sw1 = 1 Then Led1 = 1
If Sw1 = 0 Then Led1 = 0
If Sw2 = 1 Then Led2 = 1
If Sw2 = 0 Then Led2 = 0
Loop
|
|
Hat jemand eine Idee, was ich falsch mache, bzw. anders machen sollte?
MfG Mathias
|
|
BID = 763674
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
|
Hallo,
Edit: Blödsinn mit Tasten prellen entfernt, zu spät bemerkt, dass das ja kein Taster ist mit "Toggle" Funktion.
Blöde Frage: Wie groß sind denn deine PullDown Widerstände?
Wenn die groß genug sind, könnten die, kombiniert mit den integrierten PullUp Widerständen, irgendwelche Spannungen erzeugen.
LG
Simon
Edit2:
Hab grad das Datenblatt offen.
Ohne mich jetzt auch nur im geringsten bei Bascom auszukennen:
Wie kann es sein, dass du PB6 und PB7 als Tastereingang (= TOSC1 und TOSC2 für den Quarz) verwendest und oben "crystal" definierst?
[ Diese Nachricht wurde geändert von: wulf am 3 Mai 2011 12:35 ] |
|
BID = 763685
Offroad GTI Urgestein
Beiträge: 12741 Wohnort: Cottbus
|
Zitat :
| Wie groß sind denn deine PullDown Widerstände? |
Jeweils 10k (Die internen PullUp Widerstände sind doch aber gar nicht eingeschaltet )
Zitat :
| Wie kann es sein, dass du PB6 und PB7 als Tastereingang (= TOSC1 und TOSC2 für den Quarz) verwendest und oben "crystal" definierst? |
Damit (TOSC1 und TOSC2) kann ich leider nichts anfangen.
MfG Mathias
|
BID = 763689
sepp@kaernten Schriftsteller
Beiträge: 709 Wohnort: Austria
|
Hallo!
Lies dir die Seite mal durch: LINK!
..unter µC-Ecke\Lehrgänge\Bascom Hardware\Grundlagen\Hardware-Interrupts..
..oder hier: LINK!
_________________
..was man nicht begreift, verlernt man nicht..:(
[ Diese Nachricht wurde geändert von: sepp@kaernten am 3 Mai 2011 15:14 ]
|
BID = 763692
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Na, das hier ist falsch:
Led1 Alias Pinb.6
Led2 Alias Pinb.7
Das müsste jeweils PortN lauten.
Zumindest, wenn man der Logik der Registerbezeichnungen folgt: PortXN ist ein Ausgang, PinXN ist der korrespondierende Eingang.
Wenn kein externer Quarz an XTAL1 und XTAL2 angeschlossen ist, dann geht das so in Ordnung. AFAIK läuft dieser AVR mit 8MHz internem Systemtakt, wenn man nicht umkonfiguriert.
Der Watchdog kommt auch nicht in Frage für diesen Fehler.
Edit:
@wulf:
Zitat :
| Wie kann es sein, dass du PB6 und PB7 als Tastereingang (= TOSC1 und TOSC2 für den Quarz) verwendest und oben "crystal" definierst? |
Aber das tut er doch gar nicht.
An PB6 und PB7 hängen die LEDn, an PB1 und PB2 die beiden Taster.
Crystal wird, denke ich mal, für jegliche Art von Takt benutzt, und soll nur den Systemtakt festlegen, auch wenn es hier der interne RC-Oszillator ist .
_________________
[ Diese Nachricht wurde geändert von: DonComi am 3 Mai 2011 15:30 ]
|
BID = 763740
Offroad GTI Urgestein
Beiträge: 12741 Wohnort: Cottbus
|
Zitat :
| Das müsste jeweils PortN lauten. |
So ist es. Und jetzt funktioniert es auch endlich so wie es soll.
Zitat :
| PortXN ist ein Ausgang, PinXN ist der korrespondierende Eingang. |
Und ich hab nich immer gefragt, wozu dort einmal PIN und ein anderes mal PORT steht.
Vielen Dank an Euch
|
BID = 763752
wulf Schreibmaschine
Beiträge: 2246 Wohnort: Bozen
|
@DonComi:
Hoppla, ging wohl daneben.
_________________
Simon
IW3BWH
|
BID = 766112
Offroad GTI Urgestein
Beiträge: 12741 Wohnort: Cottbus
|
Ich muss nochmal von dem Thema anfangen....
Der unten stehende Schaltplan soll mit einem µC realisiert werden. Das Problem ist nun aber, dass bei "Debounce" immer nur ein Unterprogramm aufgerufen werden kann - Oder habe ich das falsch verstanden? - die Signale der Taster aber mehrfach benötigt werden.
Könnte man das evtl. mit Merkern lösen? Also dass man sagt(nur mal schnell symbolisch) "Debounce S1,1,sub1" und dann "sub1: S1 = Merker_S1" und diese Merker dann ohne ein Unterprogramm weiter verwendet.
Ein Problem wäre dann auch noch die Rückkopplung der beiden RS-FF. Beim zyklischen Programmdurchlauf ist ja der Ausgangswert des zweiten FF noch gar nicht berechnet, der Wert wird aber für das erste FF benötigt. Müsste man die Ausgänge dann schon am Anfang des Programms auf 0 setzen?
MfG Mathias
|