Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: I2C Routinen - jetzt aber richtig,Richtig ;-( Kategorie: C-Control I Micro (von JanPeter - 27.08.2004 21:34)
 Als Antwort auf Re: I2C Routinen - jetzt aber richtig ;-) von André H. - 25.08.2004 22:07
> Hallo JanPeter,
>
> > Hallo alle die reagiert haben!
> > Das finde ich gut so , denn nur so kommt man weiter.
> > Man kommt aber nur weiter , wenn es bei dem Programm bleibt, das am Ende rauskommen soll!!!
> >
> > Ihr konzentriert Euch nur auf das geschriebene keiner Fragt warum geht es denn nicht !
> >
> > Ich bin der Meinung wenn das Programm von Andre nur ein Beispiel ist , soll es auch funktionieren!!!
> >
> > Aber zum Beispiel beim lesen vom PCF8591 , habe ich gleich beim durchsehen erkannt, da fehlt
was !
> > Es sind die Ack und NoAck Befehle.
> > Hab Ihr denn nicht das Datenblatt von Philips gelesen.
>
> Ich geb's auf. Du kannst scheinbar keinen Quellcode lesen.
> Ferner scheinst Du auch nicht den Unterschied zwischen Routinen und Programmen zu kennen.
> Sagen Dir so Funktionen wie read() und readlast() etwas ? Ich denke nicht.
> Denn bei I²C-Bus-Routinen gibt es technisch gesehen keine eigenen "Befehle", wie Ack und NoAck,
> sondern eben nur Read und Readlast. Denn ein I²C-Bus-Byte besteht immer aus 9 Bit, bei
> dem das 9. Bit eben das Acknowledge ist.
> Wie gesagt. Die Routinen funzen und sind erfolgreich getestet.
> Wenn Sie bei Dir nicht laufen, solltest Du vielleicht einmal Dein fehlerhaftes Programm
> posten, bevor Du meinst Du müsstest Fehler aufdecken, wo keine sind.
>
> Und, so nebenbei. Ich hoffe schon, daß Dir bekannt ist, daß ich wahrscheinlich
> zu den 10 Leuten in D gehöre, die sich am besten mit dem I²C-Bus auskennen.
>
> Und wenn jetzt noch ein unqualifizierter Kommentar Deinerseits kommt, lösche ich einfach all
> Deine Postings.
> Denn ich bin immernoch ziemlich Sauer, wegen Deines letzten Postings, und
> hab' langsam die SV.
>
> MfG André H.
>


Hallo Andre H. !
Man muss ja nicht gleich so ausfallend werden, wie Du!

Wenn man mal eine Frage stellt zu einem  Â„Beispiel“ von Dir.
Ich provoziere gerne Leute im Internet, um festzustellen, mit wem hab ich es zu tun. Das ist
interessant, wie die Reaktion kommt.
Wie z.B. mein TOG funktioniert nicht?
Dann werde ich erst mal auf die niedrigste Stufe gesetzt u.s.w. .
Vorher hatte ich eine I2C-Routine ins Netz gestellt.
Das ist so wie beim Angeln, Köder auswerfen und der Fisch beißt.
Und Du hast angebissen!
Und Du hast Deine angebliche „Richtige Routine“ ins Netz gestellt.
Und mich runter gemacht mit : „Du kannst scheinbar keinen Quellcode lesen
Und
-------------------------------------------------------------------------
Das schärfste
 Zitat. „ Und so nebenbei. Ich hoffe schon, dass Dir bekannt ist, dass ich wahrscheinlich zu den 10
Leuten in D gehöre, die sich am besten mit dem I2C-Bus auskennen.

Und der Höhepunkt kommt noch:
Und wenn jetzt noch ein unqualifizierter Kommentar Deinerseits kommt, lösche ich einfach all Deine
Postings.
Denn ich bin immer noch ziemlich Sauer , wegen Deines letzten Postings, und habÂ’langsam die SV.
MfGAndre H.
------------------------------------------------------------
So nun zu meiner Entwicklung zum Programmieren.
Ich habe 1983 mir einen Computer gebaut.
Mit Z80 u.s.w. . mit Bildwiederholspeicher, Ausgabe am Fernseher und Kassetteninterface, zum
abspeichern der Programme . Ich Programmierte alles in Maschinensprache.
Habe mir eigene Spiele für den Fernseher programmiert.
Und da weiß ich schon was ein TOG ist!

Das muss doch nicht sein von Dir!


 Arbeite doch lieber mit jedem, der Dir ein Programm einspielt.
Und zusammen kommen wir WEITER.

Es gibt heutzutage keine Götter mehr!!!!!!!!!!!!!!!!!!!!!!!!!
Wer sich zum Gott macht , landet irgendwann in der Höhle.

So nun kommen wir zum eingemachten!
Dein Teilprogramm zum Lesen eines Bytes lautet:

------------------------------------------------------------------------

''Lesen eines Bytes oder mehrerer an Bausteine mit Byte-Register:

' z.B. PCF8583, PCF8591, 24C01 bis 24C02, MAX7311, MAX520
data = &hA0
gosub i2c_start
data = 0 ' Register 0
gosub i2c_write
data = &hA1
gosub i2c_start ' repeated start
gosub i2c_read
print "Daten: ",data
gosub i2c_read
print "Daten: ",data
'...
' weitere Daten können sequentiell gelesen werden
'...
gosub i2c_readlast
print "Daten: ",data
gosub i2c_stop
--------------------------------------------------------------------------

Was ist da Falsch?
Du schreibst:
1.Fehler            data=&HA0
Danach              Gosub i2c_start
Und danach  data=0
 Gosub i2c_write



Schreibe: Gosub I2C_start
data=&HA0
gosub i2c_write
data=0
gosub i2c_write


Du schreibst:

2.Fehler data = &HA1
        gosub i2c_start ' repeated start
       
schreibe: gosub i2c_stop
gosub i2cstart

3.Fehler
data = &HA1
gosub i2c_write





So nun Das Beispiel was funktioniert:







'********************************************************************************
'                                                                               *
' C-Control/MICRO       I2C_PCF8591K3.BAS                                       *
'           JPM         aus Schöneiche b. Berlin                                *
'                    27.08.2004 PCF8591 read                                    *
' Aufgabe:           Demo                                                       *
'               PCF8591 AD Kanal 3  einlesen mit Ausgabe auf PRINT              *
'                                                                               *
' - Porterweiterung für MICRO ueber den I2C-Bus                                 *
' - Ansteuerung ein  PCF8591                                 W=&H90 R=&H91      *
'  Uref auf +5V                                                                 *
'  am Kanal 3 ist die Mittelanzapfung , die andere an +5V und die dritte an GND *
'                                                                               *
' - SDA am Port 5     (kann geändert werden)                                    *
' - SCL am Port 6     (kann geändert werden)                                    *
'                                                                               *
'                    Programm ist getestet und funktioniert                     *
'********************************************************************************
define SCL PORT[6] ' Pull-Up mit 1K bis 10k notwendig
define SDA PORT[5] ' Pull-Up mit 1K bis 10k notwendig

define i    byte[1] 'temporäres Byte
define data byte[2] 'Byte zur Datenübergabe zu/von I²C-Bus-Routinen

baud 9600

#schleife
gosub readpcf8591_1
Pause 10
goto schleife

'Lesen eines Bytes vom PCF8591
#readpcf8591_1

gosub i2c_start
data = &h90                          '1. PCF8591 ansprechen schreiben
gosub i2c_write
data = 2                             ' Register , 3.Kanal (von 1...4 gezählt)
gosub i2c_write
gosub i2c_stop
gosub i2c_start
data = &h91                          '1. PCF8591 ansprechen lesen
gosub i2c_write
gosub i2c_read                       'Wert nicht aktuell
gosub i2c_readlast                   'Wert vom 1.Kanal
print "Daten: ",data
goto i2c_stop
return

'---------------------------------------
'I²C-Bus-Routinen
'---------------------------------------
'---------------------------------------
#i2c_stop
'---------------------------------------
 SDA=0
 SCL=1
 SDA=1
 return
'---------------------------------------
#i2c_start
'---------------------------------------
 SDA = 0
 SCL = 0
 return
'---------------------------------------
#i2c_write 'returns Ack in i
'---------------------------------------
SDA = data AND &h80
 TOG SCL
 TOG SCL
 for i=1 to 8
  SDA = data AND (&h80 SHR i)
  TOG SCL
  TOG SCL
 next
 DEACT SDA
 TOG SCL
 i = NOT SDA
 TOG SCL
return

'---------------------------------------
#i2c_read 'returns Databyte in data
'---------------------------------------
gosub i2c_sub_read
 SDA = 0
 TOG SCL
 TOG SCL
return

'---------------------------------------
#i2c_readlast 'returns Databyte in data
'---------------------------------------
gosub i2c_sub_read
 TOG SCL
 TOG SCL
return

#i2c_sub_read
DEACT SDA
 data = 0
 for i=0 to 8
  TOG SCL
  data = (data shl 1) or (SDA and 1)
  TOG SCL
 next
return

end
Das ist ziehmlich närflich mit Dir
Ich habe 3 Tage verschwendet, zur Analyse Deines Programme und bin nicht weiter gekommen.
Du hast mir 3 Tage in der Programmierung von meinen Programmen gekostet!
Ich hoffe auf eine Entschuldigung

Nicht jeder ist Gott!

Mit freundlichen Grüßen
Jan-Peter
Aus Schöneiche b.Berlin


 Antwort schreiben

Bisherige Antworten:

Re: I2C Routinen - Das kann doch nicht war sein! (von André H. - 28.08.2004 8:18)
    Re: I2C Routinen - Das kann doch nicht war sein! (von JanPeter - 28.08.2004 20:49)
        Re: I2C Routinen (von André H. - 4.09.2004 11:36)
            Re: I2C Routinen (von JanPeter - 6.09.2004 23:21)
                Re: I2C Routinen (von André H. - 7.09.2004 8:27)
                    Re: IR-Routine (von JanPeter - 7.09.2004 22:25)
                       Re: IR-Routine (von JanPeter - 7.09.2004 22:32)