-         

Ergebnis 1 bis 6 von 6

Thema: PCF8583 Problem

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318

    PCF8583 Problem

    Anzeige

    hallo,

    habe einen PCF8583 an meinen mega16 angeschlossen. der AVR läuft mit nem 16Mhz Quarz. an scl und sda ist die RTC angeschlossen. an den I²C leitungen hängen 4,7kOhm Pullups. mit folgendem Code passiert garnix. ich kann keinen fehler finden.

    hier der code:

    Code:
    '-----------Chip Definiton-----------'
    $regfile = "m16def.dat"
    $crystal = 16000000
    Config Portd = Output
    Config Portb = Output
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    
    '-----------Sub Deklaration----------'
    Declare Sub Hauptschirm()
    Declare Sub Uhrzeit()
    Declare Sub Temperatur()
    Declare Sub Gettime()
    Declare Sub Settime()
    
    '-----------Variabeln----------------'
    Dim S As Byte , M As Byte , H As Byte , D As Byte
    Dim Wm As Byte , Yd As Byte , Month As Byte
    
    S = 0
    M = 0
    H = 0
    D = 1
    Month = 1
    Wm = 1
    Yd = 5
    
    
    '-----------Lcd Konfiguration--------'
    Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portb , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8
    
    '-----------Grafik Rahmen------------'
    Cls
    Cursor Off
    Call Hauptschirm
    Call Settime
    
    
    
    '-----------Hauptprogramm------------'
    Do
    Call Gettime
    Waitms 100
    
    
    
    
    
    
    
    
    Loop
    
    '-----------Hauptschirm--------------'
    Sub Hauptschirm()
    Line(0 , 0) -(240 , 0) , 1
    Line(0 , 0) -(0 , 127) , 1
    Line(239 , 0) -(239 , 127) , 1
    Line(195 , 0 ) -(195 , 127) , 1
    Line(50 , 0) -(50 , 127) , 1
    Line(50 , 22) -(195 , 22) , 1
    Line(0 , 63) -(239 , 63 ) , 1
    Locate 5 , 11
    End Sub
    
    '-----------Uhrzeit-----------------'
    Sub Uhrzeit()
    
    Locate 2 , 9
    Lcd "Uhrzeit: "
    End Sub
    
    '-----------Temperatur--------------'
    Sub Temperatur()
    Locate 3 , 2
    Lcd "In:"
    Locate 3 , 26
    Lcd "Out:"
    Waitms 200
    Locate 5 , 2
    Lcd "22 C"
    Waitms 200
    Locate 5 , 26
    Lcd "31 C"
    End Sub
    
    '--------Uhrzeit holen-------------'
    Sub Gettime()
    I2cstart                                                 'I2C Start
       I2cwbyte &HA0                                            'Schreibemodus
       I2cwbyte 2                                               'Sekunden-Register auswählen
       I2cstart                                                 'I2C Start
       I2cwbyte &HA1                                            'Lesemodus
       I2crbyte S , Ack                                         'lese Sekunden
       I2crbyte M , Ack                                         'lese Minuten
       I2crbyte H , Ack                                         'lese Stunden
       I2crbyte Yd , Ack                                        'lese Jahr und Tag
       I2crbyte Wm , Nack                                       'lese Wochentag und Monat
       I2cstop                                                  'I2C Stop
    
       S = Makedec(s)
       M = Makedec(m)
       H = Makedec(h)
    
       Locate 2 , 9
       Lcd Bcd(h) ; ":" ; Bcd(m)
    
    
    End Sub
    
    
    
    '----------Uhrzeit schreiben--------'
    Sub Settime()
     S = Makebcd(s)                                          'Sekunden
        M = Makebcd(m)                                          'Minuten
        H = Makebcd(h)                                          'Stunden
        D = Makebcd(d)                                          'Tag
        Month = Makebcd(month)                                  'Monat
    
        I2cstart                                                'I2C Start
        I2cwbyte &HA0                                           'Schreibemodus
        I2cwbyte 0                                              'select control register
        I2cwbyte &HC                                            'set year and day bit for masking
        I2cstop                                                 'I2C Stop
    
        I2cstart                                                'I2C Start
        I2cwbyte &HA0                                           'Schreibemodus
        I2cwbyte &H2                                            'Sekunden-Register auswählen
        I2cwbyte S                                              'Sekunden schreiben
        I2cwbyte M                                              'Minuten schreiben
        I2cwbyte H                                              'Stunden schreiben
        I2cwbyte D                                              'Tag schreiben
        I2cwbyte Month                                          'Monat schreiben
        I2cstop                                                 'I2C Stop
    End Sub
    ich kann nichts auslesen und bekomme nix angezeigt. kann mal jemand schauen, wo der fehler liegt ?

    mfg Kay

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    hi ich nochmal,

    also habe es jetzt hinbekommen, das ich die Uhrzeit lesen kann. Nur habe ich jetzt folgendes Problem:

    Die Uhrzeit läuft auf 1 Stunde gesehen ca. 3 Sekunden zu schnell. ich verwende einen 22pf Kondensator am RTC. Hat der Kondensator etwas mit der Geschwindigkeit zu tun, mit der die Uhr läuft ?

    mfg Kay

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.08.2004
    Beiträge
    197
    Ein Trimmer am Quarz, wie im Datenblatt angegeben, oder:
    Lese nur einmal pro Sekunde aus, soll an der häufigen Abfrage liegen, kann er nicht vertragen....
    Poste mal wenn es stimmt...
    Und poste auch den funktionierenden Code, ohne Fehler, andere lernen daraus.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    hi,
    der code ist der selbe wie oben. war ein hardware Fehler. widerstand gegen masse und nicht an 5V. Einen Trimmer habe ich jetzt angeschlossen. ich werde das ganze am montag ausprobieren und mich dann nochmal melden.

    mfg Kay

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    hi,

    habe jetzt wie oben schon gesagt, nen trimmer angeschlossen ( 5 - 22 pf ). aber egal was ich auch tue, ich komm nicht genau auf 1 Sekunde. wenn ich am trimmer drehe, dann sehe ich schön, wie die sekunde schneller oder langsamer läuft. Nur das Problem ist, das sie immer noch zu schnell läuft.
    was könnte es denn noch sein ?

    mfg Kay

  6. #6
    Gast
    Haste mal den Quarz gewechselt?
    Wenn du siehst, dass sich die Frequenz ziehen läst, dann müste es sich doch einstellen lassen....
    Den Trimmer wie im PDF angeschlossen?

Berechtigungen

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