PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] TWI / mysmartUSb MK2



dj_cyborg
17.02.2014, 11:54
Hallo,

die Nutzung der TWI-Schnittstelle ist mit dem myAVR Terminal sehr eingeschränkt.

Ich möchte mittels VB.net die TWI Schnittstelle des mysmartUSB MK2 nutzen, habe dazu aber bisher nichts gefunden.

Ich habe versucht die Befehle die in der MyMode-hilfe stehen mittels UART über die Com-Schnittstelle zu senden, leider ohne Erfolg.

Hat jemand diese Schnittstelle schon mal ohne das myAVR Terminal benutzt? Wenn ja, wie?

vielen Dank

mfG
Mario

oberallgeier
17.02.2014, 13:49
Hi Mario,

Dir ist vermutlich schon bekannt, dass TWI eine andere Baustelle ist als UART zbw. COM!? Deshalb verstehe ich nicht ganz was Du machen möchtest.


... Nutzung der TWI-Schnittstelle ist mit dem myAVR Terminal sehr eingeschränkt ...Ich nutze TWI - aber nicht maAVR (egal was davon). Allerdings fahre ich mit dem ELV-USB-I²C-Dingsbumms (http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=24012) Befehle vom PC/USB mittels HTerm nach meinen Controllern WENN diese Controller eine entsprechend programmierte TWI-Funktionalität haben. Und das geht ziemlich gut. ABER - es ist eben ein völlig anderes Protokoll (http://www.rn-wissen.de/index.php/I2C) als die UART/COM. Es wäre also sicher möglich, mit meinem ELV-Dings mit dem Controller zu kommunizieren - und deshalb vermute ich, dass myAVR das auch kann.

dj_cyborg
17.02.2014, 14:10
Hallo Oberallgeier,

und wiedermal danke für deine Antwort.

Genauso funktioniert der mysmartusb-Programmer auch nur, die Befehle die vom PC (ich vermute über UART) zum Programmer gesendet werden, sind mir nicht bekannt. Das myAVR Terminal ist kein normales HyperTerminal sondern hat eine eigene kleine Scriptsprache integriert was aber genau zum Programmer gesendet wird um das TWI vom Programmer zu steuern ist mir nicht klar.

Das MyAVR Terminal sieht etwa so aus http://img262.imageshack.us/img262/9792/unbenanntzg8.jpg

mfG
Mario

HeXPloreR
17.02.2014, 14:59
Hallo Mario,

hast Du denn eine I²C-Routine auf dem AVR (welchen ?) installiert?
Hast Du Dir dei besonderheiten im Maschienformat angesehen?
Welche Pins hast Du angeschlossen?

Viele Grüße
Jörg

dj_cyborg
17.02.2014, 15:26
Hallo Jörg,

danke für deine Antwort.

Also Pins (SCL,SDA,GND,VCC) und I2C Routine sollten i.O. sein, da ich über das Terminal bereits kommuniziert habe und der Programmer auch mit und ohne externe TWI-Geräte Rückmeldungen ausgibt.


Hast Du Dir dei besonderheiten im Maschienformat angesehen?

Ich glaube da könnte ich einen Fehler gemacht haben... ich teste mal...



Konsolensteuerung/Global:Console control/global:
# Kommentarzeichencomment signs
!cls Konsolenausgabe löschen*clear the console output*
!echo text gibt text aus*displays text*
m:Name Menüwechsel, Name=Menünamemenu changing, name=menu name
m:? zeigt mögliche Menüsshow possible menu
? zeigt mögliche Befehle des Menüsshow possible instructions of the menu

Hauptmenü:Main menu:
pwr 0|1 Board-Stromversorgung Aus oder Ancurrent supply of the board on or off
rst [0|1] Reset: Impuls, Aus oder Anreset: impulse, on or off
mode mm|mh schaltet den Betriebsmodus um:change the operational mode:
mm=myMode-Maschinenformat s.u.mm=myMode-machine format s.b.
mh=myMode-Userformatmh=myMode-user format

TWI-Menü:TWI menu:
ima TWI Init-MasterTWI init master
sta [1] TWI-Start senden, 1=SlowSPITWI-start sending
sto TWI-Stopp sendenTWI-stopp sending
sla adr r|w schreibe Slave-Adr + Read/Writewrite slave-Adr + read/write
ack 0|1 AcknState bereitlegento put ackn state
wr Byte... Bytes per TWI schreibenwrite bytes via TWI
rd [anz] Bytes von TWI lesenread bytes from TWI
rda [anz] Read + AutoAckread + auto ack
ack=1 vor dem Erstenack=1 before the first
ack=0 vor dem letztenack=0 before the last
state TWI-Status ausgebendisplay the TWI status
end TWI Deaktivieren/Beendendeactivate/finish the TWI

SPI-Menü:SPI menu:
start [1] SPI-Start senden, optional im Slow-ModusSPI-start sending, optional in Slow-Mode
send Byte... Bytes per SPI senden und empfangensend and receive bytes via SPI
rst [0|1] Reset: Impuls, Aus oder Anreset: impulse, off or on
end SPI Deaktivieren/Beendendeactivate/finish the SPI

Set-Menü:Set menu:
spiSpeed Abfragen der aktuellen SPI-Geschwindikeit
(0xFF=standard=7)reading the current SPI-Speed
(0xFF=standard=7)
spiSlow Abfragen der aktuellen SPI-Geschwindikeit
im Slow-Modus (0xFF=Standard=10)reading the current SPI-Speed
in Slow-Mode (0xFF=Standard=10)
spiSpeed X Setzen der SPI-Geschwindikeit
X=0(langsam)...7(schnell)set the SPI-Speed
X=0(slow)...7(fast)
spiSlow X Setzen der SPI-Geschwindikeit im Slow-Modus
X=1(mittel)...254(super langsam)set the SPI-Speed in Slow-Mode
X=1(medium)...254(super slow)
Anmerkung: Der mySmartUSB arbeitet im Programmier-
Modus immer mit normaler SPI-Geschwindigkeit, es sei
denn er kann keine Verbindung zum Controller her-
stellen. In diesem Fall wird auf Slow-SPI umge-
schalten. Dies daran zu Erkennen, dass nur eine
grüne LED blinkt.Remark: The mySmartUSB runs in Programming-Mode
always in normal SPI-Speed, unless he can not
connect to the controller. In this case he
switched to Slow-SPI. You can see it by flashing
only one green LED.

Besonderheiten im MaschinenformatSpecials in the machine format
- Kommando-Parameter müssen als Bytefolge hexa-
dezimal angegeben werden, ohne LeerzeichenCommand parameters have to be denoted as byte
sequence hexadecimal without spaces

- Kommandos werden mit einem Quittungszeichen, in
der Regel mit Newline (0x0A), abgeschlossenCommands will closure with an acknowledge char-
acter normally with newline (0x0A)

- eventuelle Rückgabewerte erfolgen als Bytefolge
als Ascii-Zeichen im hexadezimalen Format und
ggf. einem Return (0x0D)Possible return values occur as byte sequence
as ASCII-characters in the hexadecimal format
and if necessary a return (0x0D)

- Fehlerfreie Ausführung wird mit "!" + Quittungs-
Zeichen und fehlerhafte Ausführung mit "?"+
Errorcode + Quittungszeichen quittiertAn error free execution will receipted with
"!" + acknowledge character and an incorrect
execution with "?" + error code + acknowledge
character

- Wird ein Kommando mit einem anderen End-Zeichen
als 0x0A abgeschickt, so wird dieses Zeichen
auch als Quittungszeichen verwendet.
Als Quittungszeichen werden alle Zeichen kleiner
0x20 akzeptiert.When a command is sent with another end-
character as 0x0A, then this character is also
used as an acknowledge character.
All characters which are smaller then 0x20 will
be accepted as an acknowledge character.

EingabenInputs
Die Eingaben von Kommandos in dieser Oberfläche
kann als Skript oder per Einzelzeile erfolgen.
Einzelne Kommandos können mit Newline (Enter) oder
den Grad-Zeichen ° getrennt erfolgen.The input of commands in this interface can happen
as script or via several line. Several commands
can happen with newline (enter) or with the
degree-character ° separate.

BeispieleExamples
Unterschiedliche Beispiele finden Sie auf der
Karteikarte 'Skript laden'.You will find different examples at the file card
'load script'



vielen Dank schon mal

mfG
Mario

oberallgeier
17.02.2014, 16:45
... die Befehle die vom PC ... zum Programmer gesendet werden, sind mir nicht bekannt ...Mario, ich kann mir nicht wirklich vorstellen, dass I²C-Befehle bei Deinem my-was-auch-immer per UART gesendet werden. Nach meinem Verständnis kann das nicht gehen!

Ich habe mir beim Einstieg in I²C schon frühzeitig einen Sniffer gebaut (klick). (https://www.roboternetz.de/community/threads/55744-I²C-Master-m328-kann-Slave-m328-nicht-lesen?p=533026&viewfull=1#post533026) Der wird in die SDA/SCL-Leitung(en) gehängt und schon kann man mithorchen, welche Befehle auf I²C/TWI-Ebene ausgetauscht werden. SEHR empfehlenswert - gerade in der I²C-Anfangszeit war das für mich von Nutzen. Natürlich kann man auch einen ordentlichen Logikanalysator für so etwas nehmen (ist meist VIEL bequemer, schönere Darstellungen etc), aber das Geld wollte ich nicht ausgeben.

dj_cyborg
17.02.2014, 17:35
Danke für den Sniffer, deine Antwort und Geduld.

Ich glaube aber wir reden ein wenig an einander vorbei.

Du kannst bei deinem ELV die Befehle über HTerm oder andere Terminals eintippen. z.B.: den Befehl: "?" und bekommst Version, Baudrate... zurück.

Ich kann nur im myAVR-Terminal "?" eintippen, und bekomme verfügbare Befehle zurück.

tippe ich in HTerm "?" ein, kommt nichts zurück.

Die Frage ist also wie "maskiert" myAVR-Terminal die Befehle, die zum Programer gesendet werden.
Es hat also weniger mit einer I²C-Verbindung zu tun sondern mit dem Interpreter im Programer.

Oder, sehe ich das falsch?


Mario, ich kann mir nicht wirklich vorstellen, dass I²C-Befehle bei Deinem my-was-auch-immer per UART gesendet werden. Nach meinem Verständnis kann das nicht gehen!
Du kommunizierst doch auch über einen virtuellen COM-Port mit deinem Programer, oder?

mfG
Mario

oberallgeier
17.02.2014, 18:47
Danke für ... deine ... Geduld ... reden ... an einander vorbei... wie "maskiert" myAVR-Terminal die Befehle ...Aua - Mario - Du hast Recht, ich hab nicht verstanden was Du meinst. Ist mir jetzt klar - und der Grund ist, dass ich meinen Senf dazugebe ohne das myAVR-Terminal zu kennen.

Ich könnte Dir ja mal schreiben, wie ich vom Master an den Slave I²C-Befehle senden kann, obwohl der Master einen UART-Befehl erhält. WENN das etwas zu Deiner Frage beitragen könnte.

dj_cyborg
17.02.2014, 19:04
Passt schon, mir ist jeder Senf willkommen. ;)

Ja ich denke "maskiert" ist zu viel gesagt.
Man braucht nur ein ByteArray welches man mit 10 (&H0A) beendet werden muß.
Allerdings will er 19200baud.

Aber jetzt funktionierts wenigstens.



'Beispiel für den Befehl "ver", 10 beendet den Befehl.
Dim bytearray() As Byte = {Asc("v"), Asc("e"), Asc("r"), 10}
MyComPort.Write(bytearray, 0, bytearray.Length)



Den ELV hatte ich mir auch schon mal angesehen, sollte ich mich für diesen Entscheiden gehe ich dir bestimmt wieder auf die nerven. :rolleyes:

Danke euch beiden und schönen Abend noch.

mfG
Mario