Forum: Mikrocontroller und Digitale Elektronik Problem Bascom Uhr


von Matthias Knab (Gast)


Lesenswert?

Hallo, ich habe ein kleines problem mit meinem programm und zwar 
schaltet bei mir der pind.0 nie durch. wenn ich modus 2 auswähle tut 
sich nix. irgendwie glaub ich da stimmt was mit der oder funktion nicht. 
kann mir jemand helfen?

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , 
Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Stellenmenue

Dim Modus As Byte
Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte


Cls

Time$ = "00:00:00"

Do
   Locate 1 , 1
   Lcd Time$ ; "  " ;
   Locate 1 , 12
   If Stellenstunde < 10 Then Lcd "0"
   Lcd Stellenstunde ; ":"
         If Stellenminute < 10 Then Lcd "0"
         Lcd Stellenminute


   Debounce Pind.0 , 0 , Menue , Sub
      If Modus = 0 Then
         Locate 2 , 1
         Lcd "aus  "
      End If


      If Modus = 1 Then
         Locate 2 , 1
         Lcd "MP3  "
         Portb.1 = 1
      Else
         Portb.1 = 0
      End If

      If Modus = 2 Then
         Locate 2 , 1
         Lcd "Radio"
      End If

      If Modus = 3 Then
         Locate 2 , 1
         Lcd "AUX  "
         Portb.2 = 1
      Else
         Portb.2 = 0
      End If

   Debounce Pind.1 , 0 , Stellenmenue , Sub


   If Konfiguration = 1 Then                                'Wecker 
stellen
      Debounce Pind.2 , 0 , Stundew , Sub
      Debounce Pind.3 , 0 , Minutew , Sub
   End If


   If Konfiguration = 2 Then                                'Uhr stellen
      Debounce Pind.2 , 0 , Stunde , Sub
      Debounce Pind.3 , 0 , Minute , Sub
   End If

   Debounce Pind.4 , 0 , Onoff , Sub

   If Konfiguration = 0 Then                                'Wecker 
an/aus
          If Anaus = 0 Then
            Locate 2 , 11
            Lcd "   aus"
          End If

         If Anaus = 1 Then
            Locate 2 , 11
            Lcd "    an"
         End If
   End If


   If Modus = 2 Or Stellenstunde = _hour And Stellenminute = _min And 
Anaus = 1 And Modus = 0 Then
               Portb.0 = 1
               Else
               Portb.0 = 0

   End If



Loop



'Stellenmenü                                                'Menü zum 
einstellen Wecker/Uhr
Stellenmenue:
Incr Konfiguration
   If Konfiguration = 3 Then Konfiguration = 0
   Locate 2 , 11

   If Konfiguration = 0 Then
      Locate 2 , 11
   End If


   If Konfiguration = 1 Then
      Locate 2 , 11
      Lcd "Wecker"
   End If



   If Konfiguration = 2 Then
      Locate 2 , 11
      Lcd "   Uhr"
   End If
Return


'Menü                                                       'Menü MP3, 
Radio, Aux
Menue:
Incr Modus
   If Modus = 4 Then Modus = 0
Return



'Stunde                                                    'Hier wird 
die Stunde der Uhr hochgezählt
Stunde:
   Incr _hour
   If _hour > 23 Then
      _hour = 00
   End If
Return



'Minute                                                     'Hier wird 
die Minute der Uhr hochgezählt
Minute:
   Incr _min
   If _min > 59 Then
      _min = 00
   End If

Return



'MinuteW                                                    'Hier wird 
die Minute des Weckers hochgezählt
Minutew:
Incr Stellenminute
   If Stellenminute > 59 Then
   Stellenminute = 0
   End If
Return



'Stundew                                                    'Hier wird 
die Stunde des Weckers hochgezählt
Stundew:
Incr Stellenstunde
   If Stellenstunde > 23 Then
   Stellenstunde = 0
   End If
Return



'onoff                                                      'Hier wird 
der Wecker ein- und ausgeschaltet
Onoff:
Incr Anaus
   If Anaus = 2 Then Anaus = 0
Return

von Rolf I. (for_ro)


Lesenswert?

PinD.0 is der RX-Pin am Mega8.
Wenn du irgendwo im Programm einen Befehl benutzt, der den UART 
verwenden will, dann wird BASCOM automatisch die Funktion von PinD.0 auf 
Input für den UART setzen.
Dies passiert auch, wenn du nur die $baud Direktive verwendest. 
Kommentier ide mal aus, dann wird es funktionieren. Prints hast du ja 
scheinbar keine drin.

von Matthias Knab (Gast)


Lesenswert?

was heißt ide mal aus?

von Matthias Knab (Gast)


Lesenswert?

hab baud raus gemacht geht trotzdem nicht. noch jemand ne idee? bin für 
jede hilfe dankbar.

von Paul Baumann (Gast)


Lesenswert?

Offenbar funktioniert der Taster an Pind.0, denn sonst kämst Du ja nicht
in das Menü.

Im Menüpunkt 2 steht aber nur:
 If Modus = 2 Then
         Locate 2 , 1
         Lcd "Radio"
      End If

Da ist aber nichts, was Dein Radio einschalten könnte.

MfG Paul

von Matthias Knab (Gast)


Lesenswert?

ohh tut mir leid ich vertippe mich hier die ganze zeit ich meinte dass 
portb.0 nicht kommt.

von holger (Gast)


Lesenswert?

>  If Modus = 2 Or Stellenstunde = _hour And Stellenminute = _min And
>Anaus = 1 And Modus = 0 Then

Kann man bei Bascom auch Klammern setzen?

von Matthias Knab (Gast)


Lesenswert?

holger schrieb:
> Kann man bei Bascom auch Klammern setzen?

habs probiert dann spuckt er unmengen an fehlern aus.

von Paul B. (paul_baumann)


Lesenswert?

Versuche mal, die Bedingung auseinanderzunehmen:
If Modus = 2 Then
         Portb.0 = 1
         Else
       Portb.0 = 0
   End If

   If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And 
Modus = 0 Then
      Portb.0 = 1
         Else
       Portb.0 = 0
   End If

MfG Paul

von Matthias Knab (Gast)


Lesenswert?

dann bleibt er immer auf 0 eigentlich logisch wenn der letzte befehl 
immer else portb0 = 0 ist.

von Rolf I. (for_ro)


Lesenswert?

BASCOM geht die Bedingungsteile immer von links nach rechts durch, ohne 
Vorrang Regelung.
Wenn du also so schreibst

If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And
Modus = 0 Or Modus = 2 Then
   Portb.0 = 1
      Else
   Portb.0 = 0
End If

sollte es funktionieren.

von Paul B. (paul_baumann)


Lesenswert?

Das müßte auch gehen:
If Modus = 2 Then
       Portb.0 = 1
         Elseif Stellenstunde = _hour And Stellenminute = _min And Anaus 
= 1 And Modus = 0 Then
       Portb.0 = 1
         Else
       Portb.0 = 0

   End If

MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.