PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : i2c to rs232 BASCOM



sebastian.heyn
03.11.2004, 17:17
Hi,

hat jemand ne idee wie ich mit nem mega128 die daten die ein i2c sender sendet (kein empfänger dran) loggen bzw auf rs232 rausgeben kann? es sind ca 20 byte/sec also nix dolles. Ich benutze bascom und die I2C routinen scheinen nicht richtig compilert zu werden..

Flite
03.11.2004, 21:30
Hm - wenn du uns ein paar mehr Infos gibst, kann dir bestimmt geholfen werden.

Ich arbeite nicht mit Bascom, aber was heißt - scheinen nicht richtig kompiliertr zu werden?
Kommt eine Fehlermeldung (wenn ja, welche?)? Funktioniert die Software im Chip nicht? Bekommst du keine Reaktion über I2C? Welcher I2C Sender ist das? Sprichstu du ihn richtig an?

Die Umsetzung und die Ausgabe auf eines der UARTs sollte absolut kein Problem sein.

Dein Post ist im falschen Forum. Der wäre im Bascom Forum besser aufgehoben. Da würden dann die Bascom Experten antworten. Vielleicht verschiebt Frank den Thread ja ...

Viele Grüße
Flíte

sebastian.heyn
03.11.2004, 21:45
mmhh ja also fehlermeldung beim compilern.... ähm habe es mit einer angepassten routine von der hilfe versucht die ein byte ließt... aber die scheint mit dem mega128 nicht zu laufen. es muss doch in bascom einen weg geben die i2c schnittstelle anzusprechen, dafür ist sie ja da...

also ich habe ein gerät das sendet permanent daten über eine i2c,
1) egal ob was dranhängt oder nicht.
2) die kommunikation geht nur von a nach b
3) Ack/Nack wird nicht durchgeführt
4) Timeout/Fehlerkorrektur wird nicht gemacht
5) gesendet werden ca 20 byte/sekunde

ganz dummes daten raussenden also. nur 2 probleme: ich bin relativ frisch was µCom angeht und mit I2C hatte ich noch nicht allzuviel zu tun.
meinst du ich soll nochmal einen post im BASCOM forum machen?

Flite
03.11.2004, 21:56
Hm - also sehe ich das richtig, dass das andere Gerät als I2C Master agiert (also den Takt bestimmt). In wieweit man die Funktionen I2C von Bascom auch als Slave einsetzen kann weiß ich leider nicht.

Aber der Mega128 hat soweit ich weiß ein Hardware TWI (=I2C) Interface, dass man als Slave einstellen kann. Damit geht das auf jeden Fall.

Anschließend musst du nur die eingelesenen Daten im Ram zwischenspreichen (nicht unbedingt notwendig) und anschließend über die serielle Schnittstelle ausgeben.

Vielleicht schreibst du mal Frank eine PM, ob er den Thread verschieben kann? Einen neuen Thread würde ich nicht unbedingt machen. Die meisten hier schauen sich sowieso die neuen Nachrichte alle an.

Vielleicht aknnst du mal dein bisheriges Programm posten und die Fehlermeldungen des Compilers dazu ...

Viele Grüße
Flite

Frank
04.11.2004, 00:37
sebastian.heyn: So ganz versteht ich auch noch nicht was du machen willst. Willst du Dtaen mit deinem mega128 empfangen oder senden. Was geht denn nicht? VIelleicht kannst du mal Codezeilen posten.

Das Bascom recht einfache Befehle zum senden von Bytes über I2C hat, das hast du siche schon gesehn. Die funktionieren normalerweise auch fein.
Das empfangen von Bytes ist schon schwieriger, wie Flite schon sagt, da muss dein Programm als Slave arbeiten. Das wird von der aktuellen Version nicht unterstützt, erst von der neuen version welche eigentlich die Wochen rauskommen sollte (derzeit gibts nur Beta-Version).

Ich hab den Thread mal verschoben!

sebastian.heyn
04.11.2004, 09:14
Hi guten morgen.
Also ich habe im normalfall ein Gerät welches kontinuierlich daten sendet (egal ob ein empfänger dran ist oder ned) der empfänger hat die adresse 70h. nun will ich aber diese daten auf nem rechner anschauen bzw auswerten.... (evtl werden sie vorher vom µ noch in nutzbare info umgewandelt)
mein code compilert mittlerweile ohne fehler aber der mega128 schmeisst hinten was raus, was so nicht stimmen kann.
Das Gerät welches ich immer als sender bezeichne gibt den takt an. (also wird der mega128 der slave sein)

$regfile = "m128def.dat"
$crystal = 8000000
$baud = 57600

Config Porta = Input
Config Sda = Portd.5 'A22 ws
Config Scl = Portd.3 'a20 gr

Print "Start!"
I2cinit
Do
Dim X As Byte
Dim Slave As Byte
X = 0
Slave = &H70
I2creceive Slave , X
Print Hex(x) ; ",";
Loop


@frank: Danke fürs verschieben

Frank
04.11.2004, 10:35
So funktioniert das nicht! Der i2creceive Befehl dient zwar zum Abrufen von Daten eines Masters, aber der Master muss in diesem Fall inaktiv sein, also auf den Abrufbefehl warten. Erst wenn der Receive-Befehl kommt gibt der Master die Daten zurück.

Wie gesagt um Daten von einem ständig sendenden Master zu empfangen muß das Programm als Slave programmiert werden. Es wird dann ein Interrupt ausgeführt der die Daten zurück gibt. Aber dies ist bislang in den wenigsten Programmiersprachen impementiert (wenn überhaupt). Du kannst mit Bascom die Daten nicht überwachen. Außer du kaufst dir eine Zusatzlibary oder wartest auf die neue Version.
Oder du schreibst dir selbst paßenden Code der die Portleitungen interpretiert.

Eine andere Möglichkeit wäre den I2C Bus direkt an die RS232 vom PC anzuschließen. Wenn die Übertragungsgeschwindigkeit nich so hoch ist, ist das auch ne praktische Sache. Ich hab dafür eine kleine Adapter-Schaltung als Bausatz zusammengestellt, aber hab es noch nicht angeboten da ich noch nicht dazu gekommen bin die Software dafür zu schreiben. Wenn das jemand selbst kann und Intresse hat, kann er mir ne PM schicken.

Gruß Frank

sebastian.heyn
04.11.2004, 12:39
meint ihr das der mega128 schnell genug ist das man mit bascom evtl eine eigene i2c implementation programmert bekommt?

04.11.2004, 12:47
eins vorweg, ich kenne mich mit BASCOM nicht aus, hab aber mal gelesen, dass man da sehr einfach Assembler-Code einbinden kann
das Datenblatt zum ATMEGA128 enthält eine sehr gute Übersicht zum TWI-Modul, mit Beispiel-Code für C und Assembler(allerdings für den ATMEGA als Master)
wie man den ATMEGA als Slave verwendet, steht zwar nicht explizit als Code drin(wenn ich micht jetzt nicht täusche), aber den Code kann man sich durch die Beschreibungen selbst zusammensetzen(unter C war das echt nicht viel)
kann man sich unter BASCOM auch die Interruptroutinen selbst schreiben? wenn ja, kann man den ATMEGA relativ einfach (unter BASCOM) als TWI-Slave verwenden

Pascal
04.11.2004, 12:50
blödes einloggen...der Post war von mir...

wie schon gesagt, du musst I²C nicht selbst implementieren, der ATMEGA128 dürfte das ganze in Hardware(TWI genannt) besitzen

sebastian.heyn
04.11.2004, 13:09
es sollen wohl mit der nächsten version von bascom neue features was twi betrifft dabei sein.

04.11.2004, 14:28
Ja, das wird in der nächsten Version unterstützt, wie Frank schon sagte.

sebastian.heyn
04.11.2004, 14:36
Oh ja, hab das vorhin noch irgendwo anders gelesen 8-[

06.02.2005, 11:43
Hi,

Do anybody have an Assambly,Bascom or C program to write/read data to internal EEPROM of T89C51AC2 ?
Would be grateful for any help.

Alexander
intermulty@yahoo.com