Hilfe bei vermeintlich einfachem Basic Programm

Gast #3505794
Hallo,

ein vermeintlich einfaches Basic Programm liest eine i2c RTC vom Typ 
RV-3029 aus.

Der Chip ist OK, auch die Beschaltung.
In einer anderen Umgebung läuft die Hardware einwandfrei (PIC).

Die Uhr muss nicht gesetzt werden, zeigt nach Reset in der anderen 
Umgebung "Time is 0:0:1 Date is 0/0/2000".

Ich habe schon Tage gekämpft und finde einfach keinen Anhaltspunkt.
TWI Rate geändert, und vieles vieles mehr..
Anbei der recht übersichtliche Basiccode und ein Screenshot von dem 
Output des Programms. Es wäre eine große Hilfe wenn Ihr mir zeigen 
könntet wo ich etwas falsch mache.
Danke im Voraus.


CODE:


$regfile = "m1284pdef.dat"              ' 32
$crystal = 16000000                     ' 8 MHz
$hwstack = 40
$swstack = 16
$framesize = 32
Baud = 9600

$lib "I2C_TWI.LBX"
Enable Interrupts

Dim Weekday As Byte
Dim Tmp As Byte
Dim I As Byte

Dim Var_rv3029_seconds As Byte
Dim Var_rv3029_minutes As Byte
Dim Var_rv3029_hours As Byte
Dim Var_rv3029_days As Byte
Dim Var_rv3029_weekdays As Byte
Dim Var_rv3029_months As Byte
Dim Var_rv3029_years As Byte



Dim Alle_register(50) As Byte
Weekday = 2
Sda_port Alias Portc.1
Scl_port Alias Portc.0

Config Twi = 400000

Const Rv3029_write = &B10101100         'Adresse des DS1307 = &HD0 
(schreiben)
Const Rv3029_read = &B10101101          'Adresse des DS1307 = &HD1 
(lesen)

I2cinit

Gosub Rv3029_clear_pon

Do
   Gosub Read_clock_page
   Print Makedec(var_rv3029_hours) ; ":";
   Print Makedec(var_rv3029_minutes) ; ":";
   Print Makedec(var_rv3029_seconds)
   Print Makedec(var_rv3029_days) ; ".";
   'Print Makedec(var_rv3029_weekdays) ; " ";
   Print Makedec(var_rv3029_months) ; ".";
   Print Makedec(var_rv3029_years)
   Print ""
   Waitms 900
   I2cinit
Loop


Read_clock_page:
   I2cstart
   I2cwbyte Rv3029_write
   I2cwbyte &H08
   I2cstop
   I2cstart
   I2cwbyte Rv3029_read
   I2crbyte Var_rv3029_seconds , Ack
   I2crbyte Var_rv3029_minutes , Ack
   I2crbyte Var_rv3029_hours , Ack
   I2crbyte Var_rv3029_days , Ack
   I2crbyte Var_rv3029_weekdays , Ack
   I2crbyte Var_rv3029_months , Ack
   I2crbyte Var_rv3029_years , Nack
   I2cstop
Return


end
Angehängte Dateien:
Gast
Der Vollständigkeit halber einmal die Fuses.

Die Hardware wir von einem STK500 gebildet.
I2C Bus ist etwa 7 cm lang, aber läuft wie gesagt einwandfrei in anderer 
HW Umgebung mit einem PIC...
Angehängte Dateien:
Gast
Paul Baumann schrieb:
> Hast Du die Ziehwiderstände an SDA und SCL dran? Das vergißt man im
> Eifer
> des Gefechts manchmal..
>
> MfG Paul

Wie ich erwähnte läuft die Hardware doch !
Natürlich sind da Pullups dran, 4,7k.
10K hatte ich auch probiert.
Gast
Konfiguriere SCL & SDA, das Alias allein nutzt Dir nichts, nimm das 
erste Stop I2C raus, reduziere den Bus-Clock , auch das Erlauben der 
Interrupts kann raus, es werden keine benutzt. Und stell den 
funktionierenden Code rein, damit man vergleichen kann.
Ausserdem hast Du keine Rv3029_clear_pon Sub, somit kannst Du gezeigten 
Code nicht kompilieren.
Gast
Hallo,

das ist definitiv der Originalcode per drag an drop.

I2Cstop raus oder rein bringt überhaupt nix.
Auch bei 100 KhZ Takt das gleiche Problem...(Anhang)



$regfile = "m1284pdef.dat"              ' 32
$crystal = 16000000                     ' 8 MHz
$hwstack = 40
$swstack = 16
$framesize = 32
Baud = 9600

$lib "I2C_TWI.LBX"


Dim Weekday As Byte
Dim Tmp As Byte
Dim I As Byte

Dim Var_rv3029_seconds As Byte
Dim Var_rv3029_minutes As Byte
Dim Var_rv3029_hours As Byte
Dim Var_rv3029_days As Byte
Dim Var_rv3029_weekdays As Byte
Dim Var_rv3029_months As Byte
Dim Var_rv3029_years As Byte

Var_rv3029_seconds = 5
Var_rv3029_minutes = 5
Var_rv3029_hours = 5
Var_rv3029_days = 5
Var_rv3029_weekdays = 5
Var_rv3029_months = 5
Var_rv3029_years = 15

Weekday = 2

Config Scl = Portc.0
Config Sda = Portc.1

Config Twi = 400000

Const Rv3029_write = &B10101100         'Adresse des DS1307 = &HD0 
(schreiben)
Const Rv3029_read = &B10101101          'Adresse des DS1307 = &HD1 
(lesen)

I2cinit


Print "Hier kommt der Muell ;-)))"

Do
   Gosub Read_clock_page
   Print Makedec(var_rv3029_hours) ; ":";
   Print Makedec(var_rv3029_minutes) ; ":";
   Print Makedec(var_rv3029_seconds)
   Print Makedec(var_rv3029_days) ; ".";
   'Print Makedec(var_rv3029_weekdays) ; " ";
   Print Makedec(var_rv3029_months) ; ".";
   Print Makedec(var_rv3029_years)
   Print ""
   Waitms 900
   I2cinit
Loop


Read_clock_page:
   I2cstart
   I2cwbyte Rv3029_write
   I2cwbyte &H08
   I2cstop
   I2cstart
   I2cwbyte Rv3029_read
   I2crbyte Var_rv3029_seconds , Ack
   I2crbyte Var_rv3029_minutes , Ack
   I2crbyte Var_rv3029_hours , Ack
   I2crbyte Var_rv3029_days , Ack
   I2crbyte Var_rv3029_weekdays , Ack
   I2crbyte Var_rv3029_months , Ack
   I2crbyte Var_rv3029_years , Nack
   I2cstop
Return


End
Angehängte Dateien:
Gast
MWS schrieb:
> Beachte Power On Reset im DB und initialisiere die RTC mit
> gültiger Zeit
> und Datum.

Habe 3 von den RTC's und habe 2 im Tausch unter Bascom betrieben, die 3. 
mit nem PIC und mmbasic.


Die 2 mit denen ich Bascom getestet habe, haben ne HW Macke.
Die 3. funktioniert mit dem Code unter Bascom und am PIC.

Das ist echt der Hammer, so ein Zufall.

Danke für die Hilfe.
Es zeigt wieder:

" Es kann nicht sein, was nicht sein kann!"

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.