mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem Bascom Uhr


Autor: Matthias Knab (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Knab (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was heißt ide mal aus?

Autor: Matthias Knab (Gast)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Knab (Gast)
Datum:

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

Autor: holger (Gast)
Datum:

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

Kann man bei Bascom auch Klammern setzen?

Autor: Matthias Knab (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Kann man bei Bascom auch Klammern setzen?

habs probiert dann spuckt er unmengen an fehlern aus.

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Knab (Gast)
Datum:

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

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Baumann (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht 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

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.