Hallo Zusammen. Ich habe folgendes Problem: würde gern 2 µC über I2C verbinden da ich diesen Bus schon nutze um einen anderen Schaltkreis zu Steuern. 2 µC möchte ich nutzen da einer als ADC, I/O Port etc. dienen soll der andere als Anzeige- (LCD-Display) und Eingabeeinheit (4Tasten) verwendung finden soll ... also so ne Art Kabelferbeding bei der beide Schalkreise als Transceiver fungieren sollen. Beschränken möchte ich mich hierbei auf Atmel-ICs (90s4433 bzw. Atmega163) die Programmierung soll in Bascom stattfinden. Ich habe schon einiges versucht nur leider konnte ich keine vom µC gesendeten daten mit dem anderen µC empfangen. - Ist das überhaupt ohne weiteres in Bascom möglich? Über eine kleine Demo wäre ich sehr dankbar. mfg meHli
Hallo, Ich kenne denn AVRs noch nicht so gut, aber wenn er keine I2C hardware hat kannst Du es vergessen. I2C slave in software ist sehr schwierig. I2C Master ist einfach! Grüße Mark.
I2C Slave Software gibts von ATMEL in Assembler. funktioniert einwandfrei.
hm, noch nichts in der Art gemacht - aber was soll so schwierig sein? Kann ich mir im Moment nicht vorstellen.
Hallo 1. zum dem von Michael geposteten Programm gibt es eine Appl.Note AN302 auf der Atmel-Seite 2. das genannte Programm AVR302.ASM ist für einen 1200er geschrieben; ich habe es in ein BASCOM-Programm für einen 2313 (als Ass-Code) eingebunden - funktioniert einwandfrei (Programm als Anhang anbei) Falls hierzu Fragen auftauchen, kannst Du Dich ja noch einmal melden 3. Wenn Du nicht mit dem Ass-Programm arbeiten möchtest, gibt es auf der BASCOM-Seite eine (kostenpflichte Software für I2C-Slave- Routine - ca 5,-- EUR ?) Also nicht gleich die Flinte ins Korn werfen ... Wenn alles nicht 'fruchtet' kannst Du immer noch einen AVR mit I2C-Hardware einsetzen... Viel Erfolg
Hey Danke - das geht ja schnell, die Site mit dem Programm für 4,95Euro hab ich schon gefunden - ich dachte nur es geht möglicherweise "einfacher". Ein µC als I2C-Master ist problemlos. Ich werde jetzt nochmal etwas probieren (bzgl. Beiträge) ... Danke nochmal mfg meHli
@Mark de Jong: Was bitte soll an einem I²C-Slave schwierig sein? Interessant wirds erst bei Multi-Master (Arbitrierung). Ich habe das ohne Probleme mit einem 2313 realisiert. Allerdings kann ich nichts in Basic bieten.
meHli Die Routine von BASCOM für 4,95 ist übrigens eine Version des AVR302.asm - Codes versteckt in einer BASCOM-lib! Nach Angaben der BASCOM-Leute sind jedoch einige bug's bereinigt worden; Ich hab's soeben ausprobiert (für einen PCF8574): M162 als Master mit den bekannten BASCOM-Statements I2CSTART, I2CWRBYTE, etc. 2313 als Slave mit den zusätzlichen I2C-Routinen von BASCOM Es funktioniert ... Die EUR 4,95 lohnen sich m.E. sofern man mit BASCOM eine Anwendung realisieren möchte. gruß Günter
Hallo Allerseits, hat jemand von Euch besagte AppNote (AN302)? Bei Atmel gibt's die nämlich nicht mehr (oder bin ich zu blöd???) ;-). Danke, Edgar
Hi Günter, kannst du mal ein Beispiel das mit der I2C-Slave Lib geschrieben wurde posten?
Hallo Stefan Die Programme für die I2C-Slave-Routinen sind linzenz- und kostenpflichtig. Ich kann Sie Dir deshalb leider nicht weitergeben. Bezugsquelle: http://www.mcselec.com/bascom-avr.htm EUR 4,95 sollten doch erschwinglich sein ... :-) ??? Gruß Günter
I2C-Slave in Software ist sehr Ressourcen fressend, davon würde ich dringend abraten. Ich hab mir mal die AN302 angesehen. 1. Es dürfen keine anderen Interrupts aufgerufen werden, sonst verpaßt Du das Startbit. 2. Gibt es irgendeinen Fehler auf dem I2C-Bus, hängst Du für immer in dem Interrupt fest, d.h Dein Hauptprogramm steht. 3. Der Interrupt wird solange nicht verlassen, bis der I2C-Transver komplett beendet ist, d.h. Dein Hauptprogramm steht für diese Zeit. Daher kann auch die Bibliothek nicht ihre 4,95 wert sein. Als I2C-Slave reicht doch schon ein ATTiny26 aus. Peter
Welche Alternative gibt es denn dann? Eigentlich wollte ich den 2313 als Slave programmieren. Kann von mir aus auch der Mega8 oder ATTiny26 sein. Aber wie mache ich es da? Ich bräuchte mal etwas stabilen Code den ich unter Bascom auch nutzen kann. Von ASM hab ich wenig Ahnung.
Salut, @meHli: ohne Dir irgendwie den Spaß an der I²C-Sache (hoppla, ich meine natürlich TWI) verderben zu wollen, aber ein extra AVR nur als I/O interface läßt sich leicht einsparen, indem Du für den in- bzw. output simple Shiftregister verwendest. 8bit kosten ca. 30 Cent. Die lassen sich rasant ansteuern. Also schnell genug, um auf einem HD44780 LCD hunderte Frames pro Sekunde darzustellen, Taster inkl. Prellung abzufragen, etc. Wenn Dein Haupt-AVR Hardware-SPI unterstützt, ist das überhaupt kein Problem. Andernfalls ist SPI denkbar einfach selbst implementierbar. Die Register lassen sich zu quasi unendlich langen Ketten verlängern. Ich hab hier ein LCD (HD44780) dran. Dazukommen sollen noch >10 Taster und ein Rotary Encoder. Insgesamt kostet der Spaß 4 I/O-Leitungen (MOSI, MISO, SCK, /SS). Viele Grüße, Mark
Also ich nehme mal an das er den I/o Baustein nur als Demo programmiert hat - da ein solches Demo unter Bascom beschrieben wird. Es geht mir schon um andere Aufgaben. Wäre schön wenn jemand mal ein I2C Slave Beispiel hätte.
Hi /** TWI-Schnittstelle initialisieren<br> Adresse der ASR ist 0x04<br> Slave Transmitter Mode */ void i2c_init() { TWAR = ASR_ADRESS; TWCR = (1<<TWEN)|(1<<TWEA)|(1<<TWIE); } /** Behandelt die INT's des TWI */ SIGNAL(SIG_2WIRE_SERIAL) { if(TWSR==0xA8) { TWDR=i2c_pwmf; TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE); } else if((TWSR==0xB8)||(TWSR==0xB0)) { TWDR=i2c_speed; TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWIE); } else if(TWSR==0xC0) { TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE); } } sehr einfacher I2C-Slave in C zur Übertragung von 2 Byte. Controller muß dazu TWI unterstützen. Die Statusbytes des TWI wollte ich schon lang mal benamsen. Aber wie das halt so ist: Tut -> erledigt :-( Matthias
Ich möcht mich Mark anschließen, wozu willst du unbedingt zwei Controller einsetzen. So komplex können deine Verarbeitungsroutinen ja fast nicht sein. Wenn du nicht grad Videosignale ausliest idelt der up doch eh fast dauernd. Ich programmier gerade einen Mega 8 zum Auslesen von Datenzeile, VPS und WSS Signalisierung, dazu ein paar Tasten, LCD, 8bit OC Ausgänge, ein paar Leds als grobe Signalisierung und Statusausgabe via RS232. Lediglich der Programmspeicher ist etwas eng, mit der up-Auslastung habe ich keine Probleme. grüsse leo9
Aber wie progtrammiert man einen Atmel mit Hardware I2C in Bascom als Slave? Kann mir das auch jemand sagen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.