
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> 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 |