www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Taster funktioniert nicht


Autor: PCK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich bin ein wenig am verzweifeln. Seit mehreren Tagen laboriere ich 
schon daran rum, aber es will nicht so wie ich will:

Das Programm soll eine LED (Orange) nach 3 Sekunden Tastendruck 
einschalten, den Zustand halten (Taster losgelassen) und bei erneuter 
Betätigung (3 Sekunden) die LED Orange wieder ausschalten. Der Status 
soll über die beiden LED's Rot und Grün angezeigt werden.

Der Zustand wird im EEPROM gespeichert, so dass bei Stromausfall der 
Schalterzustand gespeichert wird (writeeeprom).

Damit das Programm sicher ist, habe ich die Zeitfunktion über einen 
Zähler gelöst. Mit Wait will ich nicht arbeiten, da das (3 Sekunden) 
schon überkritisch ist daher auch der Watchdog mit 16 ms.

Jetzt zu meinem Problem: Der Taster wird nicht erkannt: Ich kann darauf 
rumdrücken wie ich will, in der Realität geht es nicht (Simulation geht 
aber). Ich habe schon den Port b3 auf high und auf low gesetzt (Programm 
entsprechend geändert) er will einfach nicht. Auch das Pure Kabel auch 
ohne Vorwiderstand, bringt keinen Erfolg.

Da ich davon ausgehe, dass ich es Hardwareseitig richtig aufgebaut habe, 
kann es meines Erachtens nur ein Softwareproblem sein. Könnt Ihr da mal 
drübersehen und mir ggf einen Tipp geben? Vielen Dank!

Grüße Philipp

Hier der Code:

$crystal = 1000000                     '1 MHz Taktfrequenz, Intern
$regfile = "attiny26.dat "                       'Tiny26 Def - Datei

'Portdeklaration
Config Pinb.5 = Input                                 'Noch nicht 
benutzt
Config Pinb.4 = Output                                'Noch nicht 
benutzt
Config Pinb.3 = Input                                 'Taster
Config Pinb.2 = Output                                'LED Grün (ON)
Config Pinb.1 = Output                                'LED Rot (OFF)
Config Pinb.0 = Output                                'LED Gelb
Config Watchdog = 16                                  'Watchdog auf 16 
mS

Dim Z As Long

'Initialisierung Schalter logisch

Readeeprom Z , &H10

If Z = 1 Then                                   'War eingeschaltet?
   Portb.0 = 1
   Portb.1 = 0
   Portb.2 = 1
Else
   Portb.0 = 0                                  'War ausgeschaltet?
   Portb.1 = 1
   Portb.2 = 0
End If


'Hauptprogramm

Start Watchdog                                  'Watchdog eingeschaltet
Do
   If Portb.3 = 1 Then
      Z = Z + 1
      If Z > 40000 Then      'Zeit mit tiny26 bei 1 mhz
         If Portb.0 = 1 Then                                'Ausschalten
            Portb.0 = 0
            Portb.1 = 1
            Portb.2 = 0
            Z = 0
            Writeeeprom Z , &H10
         Else
            Portb.0 = 1                                     'Einschalten
            Portb.1 = 0
            Portb.2 = 1
            Z = 1
            Writeeeprom Z , &H10
         End If
         Z = 0
      End If
      Else
      Z = 0
   End If
Reset Watchdog
Loop

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PCK schrieb:
> Da ich davon ausgehe, dass ich es Hardwareseitig richtig aufgebaut habe,

Zeig trotzdem erstmal den Schaltplan.


Peter

Autor: B-Bert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit ein Signal/Pegel am Portpin erkannt werden kann (Taster gedrückt 
oder nicht), müssen definierte Zustände vorliegen.

Dazu benutzt man i.d.R. Pullup- oder Pulldown-Widerstände.

Pullups hat der AVR schon eingebaut, sie werden mit DDRx = 0 (Portx = 
Eingang) und dann(!) mit PORTx=255 aktiviert (in dieser Reihenfolge!).

Dann kann man den Schalter vom Pin gegen Masse schalten. Bei offenem 
Schalter liegen ca. 5V (+Ub) am Pin an (=HI). Wird der Schalter 
geschlossen, so wird der Pin nach Masse gezogen (=LO).
(Bei Verwendung von Pulldowns das ganze genau andersrum).

Man kann natürlich statt PORTx = 255 (also interne Pullups einschalten) 
auch einfach externe Widerstände verwenden.

(übrigens: der Port A wird mit PINA ausgelesen, var = PINA (!), nicht 
mit var = PORTA, dann bekäme man nur den Zustand der internen Pullups!, 
häufiger Fehler)

Hoffe, es hilft weiter und ich erzähle dir nichts Altbekanntes...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.