-
Also, zum I2C READ:
Leider kann man nicht schreiben "DataByte = SYS ..."; das geht anscheinend nur bei Unterprogrammen, nicht bei SYS.
Deshalb musst Du jetzt irgendwo ein Unterprogramm definieren:
#I2C_READ
sys I2C_READ_ I2C_ADDR
return
und kann dann aufrufen:
value = i2c_read
Bin mir nicht 100 pro sicher, ob das Ergebnis dann wirklich im low byte von VALUE steht und ob das high byte wirklich 0 ist;
zum Testen am besten ein WORD deklarieren (PARAM kannst Du hernehmen), und dann explizit LBYTE und im HBYTE ausgeben.
(Kann grad nix testen: Robby Akkus werden geladen, und muss erst wieder PCF als READ zusammenstecken)
Ich werde die Schnittstelle zum I2C ändern, z.B.
IN: Adresse in LBYTE, Daten in HBYTE (nur WRITE)
OUT: Daten in HBYTE (nur READ)
Muss dazu aber auch den Assembler-Teil ändern.
-
Die Kinder haben mir die Kamera geliehen, und damit ist es mir gelungen, Bilder von meinem Erweiterungs-Board und vom LCD Mini-Board zu machen: https://www.roboternetz.de/phpBB2/vi...hp?p=5400#5400.
-
Hallo jörg!
Du schreibst:
Aber: was macht man, wenn paar Ports desselben PCF IN sind, und paar sind OUT? Denn: technisch gesehen, werden beim READ immer alle 8 PCF-Ports gelesen, und ich weiss nicht, was "quasi tristate" beim PCF heissen soll.
Die ports sind quasi bidirektional.
Das quasi deshalb , weil man ja z.B. nur schreiben kann und danach lesen und nicht beides gleichzeitig.
Die Ports für in zum testen würde ich mit einem Draht kurz an + oder - legen, noch nichs mit Tastern.
Man kann das auch trennen , um eine Vereinfachung zu erreichen
1.PCF8574 für Ausgabe , 2. PCF für eingabe.
Also 1. LCD-Ausgabe und 2. für Eingabe
-
Hallo jörg!
Das geht nicht so , wie du beschrieben hast :
#I2C_READ
sys I2C_READ_ADDR
return
Ich muss ja irgendwo die Adresse mit Übertragen , dass das Programm weiss, wo es lesen soll (bei welchem PCD8574) !
-
Das ist hier schlecht zu lesen, und die Namen sind vielleicht bisschen blöd mit all den I2C und _;
das muss heissen:
sys I2C_READ_ I2C_ADDR
Der Parameter I2C_ADDR ist definiert auf den WRITE (!!) Port, z.B. auf &H40. Es ist auch beim READ der WRITE Port, damit man nicht 2 defines braucht für jeden PCF, sondrn nur einen.
Ich hoffe, es geht!
Hoffe, es geht!
-
Oha, da gehen alle SPACES verloren, die ich so mühsam eintippe; also
Code:
sys I2C_READ_ I2C_ADDR
-
Da wird sich Robby aber freuen:
Ich hab seine Akkus aufgeladen, und könnte jetzt eigentlich wieder testen.
Aber ob sich meine Bauteile auch freuen, weiss ich nicht;
immerhin messe ich jetzt 8.2 V an der BATT, und 7.4 an Vcc.
Oh je!
-
Hallo jörg!
Ich werde es Heute ausprobieren .
Mit der Spannung gefällt mir auch nicht .
Ich habe Robby jetzt NiMH-Akkus mit 2100mAh gegönnt.
Bei erster inbetriebnahme hatte ich nach dem laden der Akkus 7,8 Volt!
Und Robby wollte erst nach dem 5. Versuch sein Programm ausführen.
Ich glaube wir brauchen wirklich 5 Volt Versorgungsspannung.
Ich trau mich nicht ran mit dem Regler 5V/3A, weil ich nicht weiss , ob die Mosfets zur Motorregelung mit der Ansteuerung der Versorgungsspannung von 5 Volt richtig angesteuert werden.
-
Hallo JanPeter:
Ich hab auch NiMH, mit 2000 mAh.
Ich könnte wetten, dass das Programm beim ersten Einschalten nicht angelaufen ist, erst nach Ausschalten, Einschalten und nochmal START; aber ich bin mir nicht sicher, weil meine START manchmal nicht geht. Seitdem hatte ich keine Probleme mehr.
Die zusätzlichen Bauteile (74HCT00, PCF8574, LCD, PCF8574A) laufen auch unauffällig vor sich hin.
Trotzdem!
Aber das mit dem Regler ist mir auch nicht ganz geheuer. DIE HARD hatte da mal geschrieben, welche Teile UNBEDINGT auch mit 7 V laufen müssen (Mosfets? ).
Der I2C_READ läuft. Ich hab folgendes gemacht:
Auf Steckbrett:
1. PCF8674 mit Adressen auf Gnd, = &H40 (am LCD habe ich ja PCF8574A...)
2. Alle 8 Daten-Ports über 10 k nach "Vcc"
3. Steckbrett samt PCF mit 4 Käbelchen an Gnd, Vcc, SDA, SCL in meine parallele zweite I2C-Buchse am LCD MiniBoard gesteckt
4. Zum Testen mit Käbelchen die Daten-Ports des PCF auf Gnd gelegt.
Im CCBASIC Testprogramm irgendwo Endlosschleife eingefügt:
Code:
#show_i2c_read
gosub lcd_cls
gosub lcd_print : print "I2C read";
#read_loop
gosub lcd_line2
gosub lcd_print : print "val=";
subcmd = i2C_read
gosub lcd_write_hex
goto read_loop
und am Ende irgendwo die Basistreiber
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII CCRP5 I2C DRIVERS
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
#I2C_READ ' reads and RETURNs one byte from the I2C device with WRITE (!) address I2C_ADDR
' IN: ---
' OUT: RETURN = byte read from device
' EX: value = i2c_read
sys I2C_READ_ I2C_ADDR
return
#I2C_WRITE ' writes HBYTE to the I2C device with (WRITE) address I2C_ADDR
' IN: HBYTE: byte to be written to I2C device
' OUT: ---
' EX: hbyte = 123 : gosub I2C_WRITE
sys I2C_WRITE_ hbyte, I2C_ADDR
return
Viel Erfolg damit!
-
Jetzt gehts ja mit sogar Bild!
Brauch ich nie wieder Schaltplan zeichnen!
Geht doch nicht: Ich hab meine Upload Quota Grenze erreicht...