*Hellhörig werd* 2 RNBFRA?
Sprung in die Kiste 2.RNBFRA rausgezerrt und auf den Tisch gelegt.
Wie würde man das Thema denn angehen?
Nur mal so als Überlegung.
Auf dem 2.RNBFRA der Mega32 als Multimaster auf welchem Bus?
Neugierige Gruß
Druckbare Version
*Hellhörig werd* 2 RNBFRA?
Sprung in die Kiste 2.RNBFRA rausgezerrt und auf den Tisch gelegt.
Wie würde man das Thema denn angehen?
Nur mal so als Überlegung.
Auf dem 2.RNBFRA der Mega32 als Multimaster auf welchem Bus?
Neugierige Gruß
Morjen !
Die zwei RNBFRA würden über das I2C Kabel einfach verbunden werden, dann sind die beiden Busse einer. Master sind dann 2 x ATMEGA und (2x 2313, wenn's gut genug klappt, oder die 2313 sind eben auch 2 Slaves)
Problem: die PCF-Expander auf den Boards brauchen unterschiedliche Adressen, logo. oder man wechselt auf die andere Serie
https://www.roboternetz.de/wissen/in...%C3%9Cbersicht
Die Atmegas (oder einer) sind das Tor zur RS232 Welt. (RN-Comm)
Das ist dann ein WWW
(Werkstatt-wide-web) :-)
Das ...
... habe ich so gelöst, wie PicNick gesagt hat:Zitat:
Problem: die PCF-Expander auf den Boards brauchen unterschiedliche Adressen
https://www.roboternetz.de/phpBB2/viewtopic.php?t=19498
Mit den wählbaren Adressen für den Co wäre das schon fein, aber ich will nicht wirklich beide Cos mit Servos behängen.
Ein anderes Prob: Auf meiner 2. RNBFRA sitzt kein AT90S2313, sondern ein ATtiny2313 und der spuckt Galle, wenn er die Servos steuern soll.
Ist das Prog reif für beide?
Sonst: Tests klappen wunderbar, ich bin begeistert.
P.S.:
Wie wär's mit PD4? Allerdings muss man dann unten rumlöten.Zitat:
Ich hab keine Pins auf dem 2313, die man jumpern könnte.
Gruß Dirk
Hübsches Programm, das hatte ich schon lange erhofft, prima Arbeit. Könntest du vielleicht das Servoprogramm noch für den AT90S2313 kompilieren? Dann sollte das auch auf meinem RNBRFA 1.22 laufen...
Vielen Dank.
At90S2313 / Attiny2313
Ich glaub', der Tiny ist Pinkompatibel, ist ja auch der Nachfolger. Muß mir mal die Datasheets anschauen, ob's da was hat. Wahrscheinlich muß ich nur auf "Tiny" kompilieren.
Adresse: Ich glaub, für's erste mach ich das einfach mit einem Befehl "adresse setzen" und merken im EERAM. Löten is weniger gut, glaub ich. Wenn man die vergebene adresse doch vergessen hat, braucht man nur nachbrennen.
Frank meint übrigens, ich kann die Adresse "68" verwenden (Als default)
Die 60-6E Serie is ja nur vom RN-Miniservo benutzt (62)
Wäre fein, wenn sich ausser Servos nun noch mehr sinnvolle Beschäftigungen für den Co-Prozessor finden ließen. Ich hab den Verdacht, dzt. steckt der auf vielen RNBFRA's einfach nur drin und macht nix (eigene Erfahrung).
Ich schau mir das mit den Tiny mal an, kann ja kein Problem sein.
@PicNick:
so, jetzt habe ich RNSI2C lange in verschiedenen Varianten auf meiner RNBFRA getestet. Meine Servos zeigen schon erste Abnutzungen (vielleicht sollte ich ab jetzt welche mit Metallgetriebe kaufen!):
Ergebnis:
1. Läuft sehr stabil ohne Probleme.
2. Auffallend ist, dass "Sendeprobleme" bzw. -wiederholungen praktisch nur bei Servo 1 vorkommen und fast nie bei anderen Svnr. [EDIT: Peinlich! Das war ja wohl schon von Vortestern bekannt, sehe ich gerade!]
3. Auch durch zwischenzeitliche LCD-Ausgaben läßt sich RNS nicht beunruhigen.
Fragen:
1. Da ich ja 2 RNBFRAs habe -> Könntest du evtl. (Zumutung!) eine Version mit anderer Adresse zur Verfügung stellen? Gibt es da schon eine rn-Festlegung für die Adressen? Du hattest glaube ich 'mal 68 und 6A für den 2313 und 6C, 6E für den M32 geschrieben, oder?
2. Wäre es alternativ denkbar, die Adresse des 2313 auch via CMD zu ändern?
Dirk
So, Männer, das ist einmal recht gut getestet. Anbei das ganze Set.
RNSTEST.BAS Testprogramm für den Atmega32 (oder was anderes)
RNSI2C.BAS Servoprogramm für den at90S2313
mit anderer "def" vielleicht für den TIny2313 probieren?
MYI2c.BAS I2C includefile dazu
MYI2C.LIB I2C Slave-Library dazu (in das Bascom lib-verzeichnis)
ServoAddr = &H68
Kann geändert werden: EEPROM lesen, erstes Byte auf die gewünschte adresse setzen, wieder zurückschreiben
Geht auch mit Command-4 / addr
Wenn mehrere Servos gleichzeitig gestellt werden sollen, isses besser kein I2CSTOP dazwischen, sondern gleich wieder I2CSTART
Hallo PicNick,
super, einfach klasse! Jetzt ist die RNBFRA auch softwaremäßig komplett!
Jetzt geht das Testen wieder los. Ob ich wohl Rabatt kriege, wenn ich vom großen C 100 Servos kaufe? 8-[
Mein M32 auf RNBFRA 1 wird die beiden 2313 mit Servopositionen vollstopfen, der andere M32 funkt dann mit ein paar Zugriffen auf die PCFs dazwischen. Bin 'mal gespannt.
Bis die Servos dann fertig mit der Welt sind (ich denke da an 5 Testreihen a je 20 Servos über 5 Jahre O:) ), habe ich vielleicht ein bißchen von dem verstanden, was Du (und natürlich Frank) da umgesetzt hast! ](*,)
Vielen Dank!
Dirk
Hallo, Dirk ?
Ganz bestimmt, zumindest ein paar Werbekugelschreiber oder Feuerzeuge :mrgreen:Zitat:
Ob ich wohl Rabatt kriege, wenn ich vom großen C 100 Servos kaufe?
Das Kreuz und quer mit zwei ATmega32, drei PCF und einem 2313 geht tadellos, ich bin ja grad am Testen.
Wie erwähnt, geht ja jetzt ums Routen, PC(TCP/IP)<->RS232 und dann auf I2C.
Wenn irgendwas schräg' ist oder nicht funzt, bitte melden !
@PicNick
auch wenn's nervt, ich versuche gerade, i2cslave zu verstehen. Für meinen 2. 2313 (der 1. hat mit den Servos zu tun!) habe ich mir ausgedacht, dass er für die IR-Kommunikation (und evtl. noch für die DCF-Decodierung) geradestehen soll. Da kommt mir so ein Sklave ganz recht.
Da habe ich mir dein i2cslave.zip vorgenommen und irgendwie haben sich 2 Fragen aufgedrängt:
1. Wo in der "I2C-Laberschleife" (etwas respektlos für die ganze I2C-Kommunikation) kann ich mich mit weiteren Aufgaben in Ruhe beschäftigen?
Im Code für den Sklaven ...
... gibt es da ja 3 aussichtsreiche Stellen (DA1, DA2, DA3).Code:Do
If Twi_flag <> 4 Then ' wenn STOP war, auf START warten
' wenn Rep-Start war, natürlich nicht
'-------------------------------------------------------
Loadadr Twi_flag , Z ' Controll-Structor
Gosub Twi_wait_start ' da bleiben wir kleben
'-------------------------------------------------------
End If
If Twi_flag = 4 Then ' START oder REP-START ?
Loadadr Twi_flag , Z
Gosub Twi_get_addr ' I2C Adresse prüfen
If Twi_flag = 2 Then ' I2c WRITE (receive)
Gosub Twi_slave_tx_ack ' gut, ein ACK
Loadadr Twi_flag , Z
Gosub Twi_slave_rx_data ' daten empfangen bis Stop
' oder Rep-Start
' (wir acken dzt. alles)
'----------------------------------------
==> DA1
' Wenn er mit den Daten was machen will, sollte er es jetzt tun
' ------
' eventuell andere Daten zu abholen herrichten
' Twi_read = Varptr( was_anderes );
'----------------------------------------
Elseif Twi_flag = 3 Then ' I2c READ (send)
Gosub Twi_slave_tx_ack ' gut, auch ein ACK
Loadadr Twi_flag , Z
Gosub Twi_slave_tx_byte ' Master holt sich daten
' soviele, bis er NACK sagt
' wir haben dzt. kein Limit
Else
Gosub Twi_release ' was-weiss-ich (Bus freigeben)
==> DA2
End If
End If
If Twi_flag <> 4 Then ' Wenn kein REP-Start war, sollte
==> DA3
' der Bus jetzt kurz frei sein.
'2313 sendet jetzt selbst was
' Bascom ist für Multimaster
' aber nicht geeignet, da kann
' dzt. noch Konflikte geben
Waitms 10 ' kure Pause, wer weiss schon
I2cstart ' dzt, normales Bascom Soft I2C
I2cwbyte Out_adr ' LED geblinke
I2cwbyte M32_byte(1) ' das erste Byte des Buffers
I2cstop
End If
Loop
End
Bei DA1 sollte ich neue Daten fürs Lesen/Schreiben vorbereiten, soviel ist klar. Wieviel Zeit habe ich dazu?
Bei DA2: Was kann ich da tun und wie lange? (Wenn ich z.B. DCF decodieren will, dauert das ziemlich lange.)
Bei DA3: Der Bus ist frei, also könnte ich hier senden, was kann ich da noch machen?
2. Noch 'ne Laien-Frage:
Warum braucht's hier eine MyTWI.lib?
RNSI2C funktioniert doch im Prinzip genau so, braucht aber die MyI2c.lib von dir. Bei beiden Anwendungen wird der 2313 zum Sklaven, der kein HW-TWI kann. Also laienhaft betrachtet dieselbe Aufgabe! Warum die 2 Libs? (Wahrscheinlich eine doofe Frage, aber ich versuch's zu verstehen!). 8-[
(Natürlich habe ich den I2cSlave schon mit deiner MyI2c.lib aus RNSI2C kompiliert, was ebenfalls natürlich nicht geklappt hat!)
Gruß Dirk