-
        

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 34

Thema: Bascom Uhr Problem

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    29
    Beiträge
    380

    Bascom Uhr Problem

    Anzeige

    Servus
    ich bin gerade dabei eine Uhr mit Wecker und Datum zu programmieren. Das
    ganze mache ich mit Bascom.

    Nun habe ich hier zwei Probleme und zwar

    1. Ich will das Licht mittels eines Distanzsensors einschalten welcher
    an dem Analog Eingang Pinc.0 angeschlossen ist. Hierfür verwende ich
    einen Sharp GP2D12.
    Im bereich Analogwertverarbeitung bin ich nicht so fit deshalb wollte
    ich fragen ob in meinem Programm jemand einen Fehler findet warum mein
    Licht sich nicht einschaltet.
    Bereich des Sensors sind 10-80cm. Ich will ungefähr 20-30cm haben muss
    also nicht genau sein.


    2. Problem ist wenn ich mit der Uhr durchtappe duch mein Menü und ich
    will den Wecker stellen bleiben immer die Sekunden der Uhr rechts neben
    dem Wecker stehen. Weiß jemand wie ich das hinbekomme damit die Sekunden
    weg sind?

    Hier mein Code. Ich weiß dass die Datumsverarbeitung fehlt. Seit bitte
    nachsichtig.

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $baud = 19200
    $hwstack = 32
    $swstack = 10
    $framesize = 40
    
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 ,
    Db7 = Portb.4 , E = Portc.4 , Rs = Portc.5
    Config Lcd = 16 * 2
    
    Config Lcdbus = 4
    Cursor Off
    
    Config Portb.0 = Output
    Config Portb.5 = Output
    Config Portb.1 = Output
    
    Config Pind.0 = Input
    Config Pind.1 = Input
    Config Pind.2 = Input
    Config Pind.3 = Input
    Config Pinc.0 = Input
    
    Const Adc_multi = 0.00244140625
    Config Adc = Single , Prescaler = Auto
    Start Adc
    
    Portd.0 = 1
    Portd.1 = 1
    Portd.2 = 1
    Portd.3 = 1
    
    
    Enable Interrupts
    Config Clock = Soft
    Config Date = Mdy , Separator = /
    Declare Sub Stunde
    Declare Sub Minute
    Declare Sub Stundew
    Declare Sub Minutew
    Declare Sub Onoff
    Declare Sub Licht
    Declare Sub Stellenmenue
    
    Dim Stellenstunde As Byte
    Dim Stellenminute As Byte
    Dim Konfiguration As Byte
    Dim Anaus As Byte
    Dim Messung As Word
    Messung = Getadc(0)
    
    Cls
    
    Time$ = "00:00:00"
    Date$ = "01/01/00"
    
    Do
       If Konfiguration = 1 Then
             Locate 1 , 1
             If Stellenstunde < 10 Then Lcd "0"
                Lcd Stellenstunde ; ":"
             If Stellenminute < 10 Then Lcd "0"
                Lcd Stellenminute
             End If
    
       Locate 2 , 9
       Lcd Date$
    
       Debounce Pind.0 , 0 , Stellenmenue , Sub
    
    
       If Konfiguration = 0 Or Konfiguration = 2 Or Konfiguration = 3 Then
          Locate 1 , 1
          Lcd Time$
       End If
    
    
       If Konfiguration = 1 Then                                'Wecker
    stellen
          Debounce Pind.1 , 0 , Stundew , Sub
          Debounce Pind.2 , 0 , Minutew , Sub
       End If
    
    
       If Konfiguration = 2 Then                                'Uhr stellen
          Debounce Pind.1 , 0 , Stunde , Sub
          Debounce Pind.2 , 0 , Minute , Sub
       End If
    
       Debounce Pind.3 , 0 , Onoff , Sub
    
       If Konfiguration = 0 And Anaus = 0 Then                  'Wecker
    an/aus
                Locate 2 , 1
                Lcd "aus   "
              End If
    
       If Konfiguration = 0 And Anaus = 1 Then
                Locate 2 , 1
                Lcd "an    "
             End If
    
    
       If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 Then
                   Portb.1 = 1
                   Else
                   Portb.1 = 0
       End If
    
       If Messung < 500 Then
       Portb.5 = 0
       Else
       Portb.5 = 1
       End If
    
    
    Loop
    
    
    
    'Stellenmenü                                                'Menü zum
    einstellen Wecker/Uhr/Datum
    Stellenmenue:
    Incr Konfiguration
       If Konfiguration = 4 Then Konfiguration = 0
    
    
       If Konfiguration = 1 Then
          Locate 2 , 1
          Lcd "Wecker"
       End If
    
    
    
       If Konfiguration = 2 Then
          Locate 2 , 1
          Lcd "Uhr   "
       End If
    
    
       If Konfiguration = 3 Then
          Locate 2 , 1
          Lcd "Datum "
       End If
    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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, soweit ich das auf die schnelle erkennen konnte wird die Messung des ADC Wertes nur einmal bei Programmbeginn gestartet aber in deiner Hauptschleife dann nicht mehr, versuch mal " Messung = Getadc(0)" in die Schleife, also nach das " Do" zu setzen.

    Gruß Kalle

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ja du musst die Messung des ADC Wertes in jedem Schleifendurchlauf machen. Sonst macht er die Messung nur 1x und behält den Wert dann immer.
    Und mir ist nochwas aufgefallen. In der Bascom-Hilfe steht unter "Config Clock" das hier
    Notice that you need to connect a 32768 Hz crystal in order to use the timer in async mode, the mode that is used for the clock timer.
    Und du schreibst in deinem Programm das du die Uhr mit 1MHz betreibst. Das stört die funktion des Programmes zwar nicht aber die Uhr läuft dann nicht genau.

    Edit: Hab den Befehl "Messung = Getadc(0)" mal direkt hinter das Loop gesetzt und eine Simulation gemacht und nun funktioniert es. Sobald der ADC-Wert 499 übersteigt wird das Licht ausgemacht.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    29
    Beiträge
    380
    das mit der uhr hab ich nun schon sehr oft gehört. einer sagt das der andere dies.

    mittlerweile hab ich mal im Buch von roland walter nachgelesen und da steht was drinn von wegen dass man den internen oscilator verwenden muss und dann einen uhrenquarz verwenden muss.

    das hat sich meines erachtens auch bestätigt. nämlich wenn der quarz nicht angeschlossen ist läuft die uhr nicht los.



    habe nun die analogwertabfrage in die do schleife gemacht. nur tut sich immernoch nix. ich vermute dass die angaben (welche ich aus einem tutorial habe) nicht stimmen.
    oben deklariere ich Messung als Word und unten fragen ich ab ob es 500 ist, was ja integer ist oder?
    somit passt das ja nicht liege ich da richtig?

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ja aber theoretisch (bitte korrigieren wenn falsch!) stellste am Controller ja einen festen Teiler ein sobald du die Uhr da aktivierst. Und dieser Teiler ist ja auf 32768kHz ausgelegt (ähnlich wie bei einer I²C RTC) und wenn du dann einen anderen Takt nimmst ist 1 Sekunde im Controller nicht mehr 1 Sekunde wie sie sein soll, sondern vielleicht 3 Sekunden oder so.

    Aber wie gesagt ist nur ein theoretischer Gedankengang.

    Und wegend einen Sekunden beim Wecker
    Ich hab das mal so gemacht:

    Code:
      If Konfiguration = 1 Then
          Cls
          Locate 2 , 1
          Lcd "Wecker"
       End If
    Dann wird jedesmal die Anzeige gelöscht, weil es wohl so ist das er die Stellen von der Option "Uhr" übernimmt, weil du im Endeffekt nur die Stellen "Stunden" und "Minuten" überschreibst. Aber da du mit der Stelle "Sekunden" nichts macht bleibt das natürlich gesetzt. Durch das löschen löscht du den Inhalt und schreibst die neuen Sachen auf das Display. Kleiner Nachteil: Es "blinkt" einmal kurz.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    29
    Beiträge
    380
    dass hab ich auch als erstes so gemacht hat aber zur folge gehabt dass die unteren zeilen dann weg waren.

    habs nun so gemacht:

    Code:
    Do
       If Konfiguration = 1 Then
          Locate 1 , 1
    
          If Stellenstunde < 10 Then Lcd "0"
          Lcd Stellenstunde; ":"
    
          If Stellenminute < 10 Then Lcd "0"
          Lcd Stellenminute; "   "
    
       End If

    nur dass mit dem sensor funktioniert immernoch nicht obwohl es mittlerweile in der do schleife drinn ist.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    29
    Beiträge
    380
    hab mir nun den analogwert am display ausgeben lassen der bleibt aber dauernd bei 1023 stehen. da verändert sich nix. woran kann das liegen?

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    HAst du mal geguckt ob der Sensor überhaupt eine Spannung ausgibt? Wenn ja liegts noch an dem Programm. Und wie meinst du das mit den untersten Zeilen weg? Kann das halt nur simulieren da ich deinen genauen Aufbau nicht kenne. Wäre für mich ganz interessant welcher Teil dann komplett weg ist, weil die Simulation hat eigtl alles richtig gemacht, aber ist halt nur eine Simulation

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.05.2006
    Ort
    Oberschopfheim
    Alter
    29
    Beiträge
    380
    also mit unterste zeile weg meine ich dass zwar die weckzeit dann da ist. aber der rest halt eben nicht mehr.

    spannung ist vorhanden rotes licht ist zu erkennen. spannung ändert sich auch gerade nachgemessen.

  10. #10
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Ich habe so die Befürchtung das es daran liegt:

    Config Pinc.0 = Input

    mach das mal weg und probier es erneut.

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •