- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: BASCOM simple Uhr

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    BASCOM simple Uhr

    Anzeige

    Praxistest und DIY Projekte
    Hallo,


    https://www.roboternetz.de/community...908#post519908

    Das würde ich gerne anwenden, in Form einer binären Uhr...



    Code ist folgender,

    $regfile = "m8def.dat"
    $crystal = 1000000
    $hwstack = 130
    $swstack = 130

    Config Portd = Output
    Config Timer1 = Timer , Prescale = 1024
    Enable Timer1
    Dim minutes as Byte
    Dim hours as Byte
    Dim day as Integer
    Dim tausender as Byte
    Dim hunderter as Byte
    Dim zehner as Byte
    Dim einer as Byte
    Dim i as Byte

    DDRD=&B11111111
    DDRC=&B11111111
    DDRB=&B11111000


    On Timer1 Isr_von_timer1

    Enable Interrupts
    Timer1 = 6942


    Do ' Hauptprogramm

    if hours=23 and minutes=50 ' Fehler: 'three parameters expected' in file C/.../Uhr.bas?

    then ' Then als Fehler erkannt - unknown statement?

    day=day+1
    hours=0
    end if

    If Pinb.0 = 1 Then
    minutes=minutes+1
    End If

    If Pinb.1 = 1 Then ' Taster, um die Uhr einzustellen
    hours=hours+1
    End If

    If Pind.b = 1 Then
    day=day+1
    End If

    If Pinb.3 = 1 Then
    day=day+100
    End If

    If Pinb.4 = 1 Then ' gib die Anzahl der laufenden Tage an


    tausender=day/1000
    hunderter=(day-1000*tausender)/100

    zehner=(day-1000*tausender-100*hunderter)/10

    einer=(day-1000*tausender-100*hunderter-10*zehner)



    for i=0 to i=tausender step 1 'jedes mal blinken gibt einen Tausender -> 5* blinken = 5000

    Pinb.5=1
    waitms 100

    Pinb.5=0
    waitms 100

    Next

    for i=0 to i=hunderter step 1

    Pinb.6=1
    waitms 100

    Pinb.6=0
    waitms 100

    Next


    for i=0 to i=zehner step 1

    Pinb.7=1
    waitms 100

    Pinb.7=0
    waitms 100

    Next


    for i=0 to i=einer step 1

    Pind.7=1
    waitms 100

    Pind.7=0
    waitms 100

    Next




    End If

    PORTD=Bin(minutes)
    PORTC=Bin(hours)

    Loop
    End



    Isr_von_timer1:

    Timer1 = 6942

    minutes=minutes+1
    if minutes=60
    then minutes = 0
    hours=hours+1
    end if

    PORTD=Bin(minutes)
    PORTC=Bin(hours)


    Return


    'Line 0 Loop expected, in file: <- leer, keine Pfadangabe



    Aber es werden leider 3 Fehler angezeigt beim Compilieren, die ich nicht beheben kann
    Geändert von runner02 (04.08.2011 um 17:03 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Welche Fehler sind das?
    Poste die mal dann kann man dir sicher helfen. Ich hab hier grad kein Bascom.

    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Habe ich dort, wo sie aufgetreten sind, im Kommentar dazugeschrieben...

    Sie lauten:


    'Line 0 Loop expected, in file: <- leer, keine Pfadangabe


    Then als Fehler erkannt - unknown statement?

    ' Fehler: 'three parameters expected' in file C/.../Uhr.bas?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    if hours=23 and minutes=50 then ' in eine Zeile

    Evtl verschwindet dann schon der letzte Fehler. Er findet den loop zu dem do nicht...
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Code:
     $regfile = "m8def.dat"
     $crystal = 1000000
     $hwstack = 130
     $swstack = 130
    
     Config Portd = Output
     Config Timer1 = Timer , Prescale = 1024
     Enable Timer1
     Dim minutes as Byte
     Dim hours as Byte
     Dim day as Integer
     Dim tausender as Byte
     Dim hunderter as Byte
     Dim zehner as Byte
     Dim einer as Byte
     Dim i as Byte 
    
     DDRD=&B11111111
     DDRC=&B11111111
     DDRB=&B11111000
    
    
     On Timer1 Isr_von_timer1
    
     Enable Interrupts
     Timer1 = 6942
    
     
         Do     ' Hauptprogramm
    
                if hours=23 and minutes=50 then   ' Fehler: 'three parameters expected' in file C/.../Uhr.bas?
    
                 day=day+1
                 hours=0
                end if
            
       If Pinb.0 = 1 Then
       minutes=minutes+1   
       End If
       
        If Pinb.1 = 1 Then   ' Taster, um die Uhr einzustellen
       hours=hours+1   
       End If
     
     If Pind.b = 1 Then
       day=day+1   
       End If
    
     If Pinb.3 = 1 Then
       day=day+100   
       End If
    
                If Pinb.4 = 1 Then     ' gib die Anzahl der laufenden Tage an
       
               
                    tausender=day/1000
            hunderter=(day-1000*tausender)/100
            
            zehner=(day-1000*tausender-100*hunderter)/10
            
            einer=(day-1000*tausender-100*hunderter-10*zehner)
    
            
    
                         for i=0 to i=tausender step 1  'jedes mal blinken gibt einen Tausender -> 5* blinken = 5000 
            
                              Pinb.5=1
                               waitms 100
                           
                               Pinb.5=0
                               waitms 100
                   
                             Next
    
             for i=0 to i=hunderter step 1
                
                Pinb.6=1
                            waitms 100
                           
                            Pinb.6=0
                            waitms 100
                                  
                       Next
    
    
             for i=0 to i=zehner step 1
        
                Pinb.7=1
                            waitms 100
                           
                            Pinb.7=0
                            waitms 100
             
                        Next
    
    
                      for i=0 to i=einer step 1
                
                Pind.7=1
                            waitms 100
                           
                            Pind.7=0
                            waitms 100
            
                         Next
    
    
    
       
                 End If
                
    PORTD=Bin(minutes)
    PORTC=Bin(hours)
         
          Loop
          End
    
    
    
     Isr_von_timer1:
    
     Timer1 = 6942
    
    minutes=minutes+1
     if minutes=60 
       then minutes = 0
        hours=hours+1
     end if
    
    PORTD=Bin(minutes)
    PORTC=Bin(hours)
    
    
     Return
    
    
     'Line 0 Loop expected, in file:   <- leer, keine Pfadangabe[/QUOTE]

    Hm, wie kann ich die loop noch verändern??? klein schreiben wird das selbe sein, oder??

    EDIT: Du meinst, wenn then oben steht geht es? Ich probiers mal und post es dann
    Geändert von runner02 (04.08.2011 um 17:41 Uhr)

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    So hier ist der korrigierte Code. Bascom gibt keine Fehler mehr aus:
    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $hwstack = 130
    $swstack = 130
    
    Config Portd = Output
    Config Timer1 = Timer , Prescale = 1024
    Enable Timer1
    Dim minutes as Byte
    Dim hours as Byte
    Dim day as Integer
    Dim tausender as Byte
    Dim hunderter as Byte
    Dim zehner as Byte
    Dim einer as Byte
    Dim i as Byte
    
    DDRD=&B11111111
    DDRC=&B11111111
    DDRB=&B11111000
    
    
    On Timer1 Isr_von_timer1
    
    Enable Interrupts
    Timer1 = 6942
    
    
    Do ' Hauptprogramm
    
    If Hours = 23 And Minutes = 50 Then                         'korrigiert Then hinter Minutes = 50
    
    day=day+1
    hours=0
    end if
    
    If Pinb.0 = 1 Then
    minutes=minutes+1
    End If
    
    If Pinb.1 = 1 Then                                          ' Taster, um die Uhr einzustellen
    hours=hours+1
    End If
    
    If Pind.2 = 1 Then                                          'korrigiert PIND.2 nicht PIND.b
    day=day+1
    End If
    
    If Pinb.3 = 1 Then
    day=day+100
    End If
    
    If Pinb.4 = 1 Then                                          ' gib die Anzahl der laufenden Tage an
    
    
                                                                                     'tausender=day/1000
                                                                                     'hunderter=(day-1000*tausender)/100
                                                                                     'zehner=(day-1000*tausender-100*hunderter)/10
                                                                                     'einer=(day-1000*tausender-100*hunderter-10*zehner)
    
    
    
    For I = 0 To Tausender Step 1                               'korrigiert I = Tausender weg
    
    Pinb.5=1
    waitms 100
    
    Pinb.5=0
    waitms 100
    
    Next I                                                      'korrigiert Next I
    
    For I = 0 To Hunderter Step 1                               'korrigiert I = hunderter weg
    
    Pinb.6=1
    waitms 100
    
    Pinb.6=0
    waitms 100
    
    Next
    
    
    For I = 0 To Zehner Step 1                                  'korrigiert I = zehner weg
    
    Pinb.7=1
    waitms 100
    
    Pinb.7=0
    waitms 100
    
    Next
    
    
    For I = 0 To Einer Step 1                                   'korrigiert I = einer weg
    
    Pind.7=1
    waitms 100
    
    Pind.7=0
    waitms 100
    
    Next
    
    End If
    
    PORTD=Bin(minutes)
    PORTC=Bin(hours)
    
    Loop
    End
    
    
    
    Isr_von_timer1:
    
    Timer1 = 6942
    
    minutes=minutes+1
    If Minutes = 60 Then
    Minutes = 0                            'korrigiert Then hinter Minutes = 60
    hours=hours+1
    end if
    
    PORTD=Bin(minutes)
    PORTC=Bin(hours)
    
    
    Return

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Toll, danke

    werd mich dann gleich daran machen, die Schaltung aufzubauen

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Auf der Steckplatine klappt es leider noch nicht...

    Code:
    If Pind.2 = 1 Then                                          'korrigiert PIND.2 nicht PIND.b
    sollte b2 sein.


    Aber nach 1 Minute leuchtet d1 noch nicht. Dafür leuchtet d4 nach 2 sek und hört nicht mehr auf...

    Ich seh schon, da kommt noch was auf mich zu

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Ich habe den Code nochmal vereinfacht bzw. habe ich mein erstes Exempel herausgepickt und will es schrittweise auf die Uhr erweitern - bis alles klappt.



    Code:
     
    '############################ Definitionen #######
    
     $regfile = "m8def.dat"
     $crystal = 1000000
     $hwstack = 130
     $swstack = 130
    
     Config Portd = Output
     Config Portc = Output
     Config Timer1 = Timer , Prescale = 64
     Enable Timer1
     Dim Sekunden As Byte
    
     On Timer1 Isr_von_timer1
    
     Enable Interrupts
     Timer1 = 49910
    
    
     '##################### Hauptprogramm ############
    
    
     Do
     Portc.4 = 1
     Waitms 200
     Portc.4 = 0
     Waitms 200
     Loop
     End
    
    
     '############################ ISR ################
    
     Isr_von_timer1:
    
     Timer1 = 49910
    
     Portc.1 = 1
     Waitms 40
     Portc.1 = 0
     Waitms 40
    
     Sekunden = Sekunden + 1
    
     If Sekunden = 60 Then
     Sekunden = 0
     End If
    
     Portd = Bin(sekunden)
    
     Return


    Portc.4 blinkt immer. Wie gedacht
    Portc.1 blinkt nur einmal, dann nicht mehr -> Timer Interrupt wird nur einmal ausgeführt!!

    Jemand zufällig ne Idee, woran dass liegen könnte?

Ähnliche Themen

  1. simple Lochrasterplatine zur led Ansteuerung
    Von quadro78 im Forum Konstruktion/CAD/3D-Druck/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 1
    Letzter Beitrag: 01.04.2009, 18:36
  2. simple Lüftersteuerung
    Von Testman3000 im Forum Elektronik
    Antworten: 22
    Letzter Beitrag: 30.01.2008, 17:14
  3. Simple Webserver
    Von EDatabaseError im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 30
    Letzter Beitrag: 26.02.2007, 16:49
  4. Simple Division mit AVR
    Von martin im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 04.01.2006, 18:42
  5. Noch mal eine simple frage...
    Von schroejahr im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 24.09.2005, 22:19

Berechtigungen

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

Solar Speicher und Akkus Tests