
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
JanPeter, Wie oft soll ich es noch vorkauen !!! > Man muss ja nicht gleich so ausfallend werden, wie Du! Da redet der richtige. > 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. Leicht provozieren ja, aber nicht so ! Hatt' ich doch das Posting von Dir nicht beantwortet. Dann hätte Dietmar mir die Entscheidung abgenommen und es gelöscht ... > 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 Sind wir hier beim Fischen !? Da Du eben Fehler siehst, wo keine sind, war das nur eine Feststellung. > 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! Schön für Dich. Das sagt aber nicht über Deine C-Control-Kenntnisse aus. > Was ist da Falsch? > Du schreibst: > 1.Fehler data=&HA0 > Danach Gosub i2c_start > Und danach data=0 > Gosub i2c_write Genau das meinte ich, daß Du keinen Quellcode lesen kannst ! Wenn Du Dir mehr als nur die Einsprungmarken in den Routinen angesehen hättest, hätteste Du unter Umständen bemerkt, daß meine Startroutine gleich das write für die Bausteinadresse mit drin hat: '--------------------------------------- #i2c_start 'returns Ack in i '--------------------------------------- SDA = 1 SCL = 1 SDA = 0 SCL = 0 '--------------------------------------- #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 Fällt Dir hier irgendetwas auf ? Ich bin nämlich gewohnt, die Startbedingung immer gleich mit einem Write zu verknüpfen. Denn nach einer Start-Bedingung wird immer ein Byte, das Adressbyte, geschrieben. (wenn man von der 10Bit-Adressierung absieht, für die es sowiso fast keine ICs gibt.) Darum ist es in der Programmierung von I²C-Bus-Routinen fast schon Gang und Gebe Ein Start direkt mit einem Write zu verknüpfen. Und genau das ist es, woran Du Dich sicher so aufhängst ! > Du schreibst: > > 2.Fehler data = &HA1 > gosub i2c_start ' repeated start > > schreibe: gosub i2c_stop > gosub i2cstart > > 3.Fehler > data = &HA1 > gosub i2c_write Dasselbe, was ich oben mit dem Start geschrieben habe. > 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 LOL. Das könnte ich eher von Dir erwarten.(Da wird mir hier sicher jeder zustimmen.) Übrigens: "nervlich" würde man mit "e" und "v" schreiben, wenn es dieses Wort geben würde. Aber du meintest sicher "nervig". Wie war das mit dem lesen und schreiben noch gleich .... Denn die Routinen waren getestet, bevor ich sie ins Forum gestellt hatte. Ich hatte sie nocheinmal getestet, als Du geschrieben hattest, sie würden nicht funktionieren. Nun arbeite ich mit diesen Routinen und schreibe Beispiele für meine CCTools-Hardware, und teste diese immer erfolgreich. Und Testen heißt bei mir, daß ich diese wirklich auf die Micro lade, die entsprechende Hardware anschließe und dann das Ergebnis beobachte, und sie mir nicht nur oberflächlich ansehe, und daraufhin sage wäre ein Fehler ... Und anbei z.B. das funktionierende Beispielprogramm zu einem DS1631. Und wenn Du hier jetzt schreibst, es würde nicht funktionieren, dann kann man Dir eben nichtmehr helfen. André H. '----------------------------------------------------------------- ' CCTools I²C-Bus-Routinen für C-Control Mikro ' CCTools 2004 (http://cctools.hs-control.de '----------------------------------------------------------------- ' Ansteuerungsbeispiel zum Temperatursensor DS1631 '----------------------------------------------------------------- define SCL PORT[5] ' Pull-Up mit 4,7k bis 10k notwendig define SDA PORT[6] ' Pull-Up mit 4,7k bis 10k notwendig define i byte[1] 'temporäres Byte define data byte[2] 'Byte zur Datenübergabe zu/von I²C-Bus-Routinen define MSB byte[3] define LSB byte[4] define DS1631addr &b10010000 'Schreibadresse define DS1631addrR &b10010001 'Leseadresse baud 9600 gosub i2c_stop ' "Initialisierung" des I²C-Busses data = DS1631addr gosub i2c_start data = &hAC gosub i2c_write data = &b1100 gosub i2c_write gosub i2c_stop data = DS1631addr gosub i2c_start data = &h51 gosub i2c_write gosub i2c_stop #loop data = DS1631addr gosub i2c_start data = &hAA gosub i2c_write data = DS1631addrR gosub i2c_start gosub i2c_read MSB = data gosub i2c_readlast LSB = data gosub i2c_stop put 12 if MSB and &h80 then goto negnum put &h20 LSB=((LSB shr 4)*13)/2 goto endif #negnum put &h2D MSB=128 - (MSB and &h7F) LSB=100-((LSB shr 4)*13)/2 #endif print MSB;",";LSB;"°C" pause 10 goto loop '--------------------------------------- 'I²C-Bus-Routinen '--------------------------------------- '--------------------------------------- #i2c_stop '--------------------------------------- SDA = 0 DEACT SCL DEACT SDA return '--------------------------------------- #i2c_start 'returns Ack in i '--------------------------------------- SDA = 1 SCL = 1 SDA = 0 SCL = 0 '--------------------------------------- #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 |
| Antwort schreiben |