www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 AVRs über I2C verbinden?


Autor: meHli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mark de Jong (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
I2C Slave Software gibts von ATMEL in Assembler.

funktioniert einwandfrei.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, noch nichts in der Art gemacht - aber was soll so schwierig sein?
Kann ich mir im Moment nicht vorstellen.

Autor: günter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: meHli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: günter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Edgar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: günter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

I2C heißt bei Atmel TWI ...

AN als Anhang anbei

Günter

Autor: Edgar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow,
das ging ja flott!

Danke,
Edgar

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Günter,

kannst du mal ein Beispiel das mit der I2C-Slave Lib geschrieben wurde
posten?

Autor: guenter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Mark Hämmerling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was zum Himmel ist TWI?

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aus Lizenzrechtilichen Gründen heißt I²C bei Atmel TWI.

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Newbie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber wie progtrammiert man einen Atmel mit Hardware I2C in Bascom als
Slave? Kann mir das auch jemand sagen?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde mich auch interessieren

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.