AVR: I2C Master Software Library für alle AVR

Gast #4148310
Lesenswert?

Hallo,

nachdem ich mich im Netz totgesucht habe und kaum wirklich etwas 
Gescheites gefunden habe, was auch funktioniert hier mal einen extrem 
kurze und funktionierende Library eines Inders, die nur einen einzigen 
Bug enhielt, den ich korrigiert habe.

Lässt sich auf jeden AVR anpasssen, bei mir rennt sie auf einem Attiny 
mit 8 Mhz und 1 Mhz gleichermaßen.

Viel Spass!

Christian
Angehängte Dateien:
Gast #4148327
Lesenswert?

Ein paar Sachen, die mir beim schnellen Lesen aufgefallen sind:

vor dem Ausgeben eines Starts wird nicht geprüft, ob der Bus Idle ist

Wenn der Slave (oder auch die Kapazität des Busses) den Clock streched, 
wird die minimale High-Zeit des Busses verletzt

MfG Klaus
Gast #4148345
Lesenswert?

Klaus schrieb:
> Ein paar Sachen, die mir beim schnellen Lesen aufgefallen sind:
>
> vor dem Ausgeben eines Starts wird nicht geprüft, ob der Bus Idle ist
>
> Wenn der Slave (oder auch die Kapazität des Busses) den Clock streched,
> wird die minimale High-Zeit des Busses verletzt
>
> MfG Klaus

Ändere es und stelle den Code neu ein. Fertig ist ja nie was. Nur 
geprüft sollte es sein auf dem Breadboard. Fehlerhafte Codes gibt es 
genug im Netz. Auch dieser war es weil der Autor einfach nicht alle 
Funktionen gestestet hat.
Gast #4148349
Lesenswert?

Arduinoquäler schrieb:
> Christian J. schrieb:
>> Viel Spass!
>
> Seltsam die invertierte Namensgebung der Signale
>
> Beispiel:
> #define SOFT_I2C_SDA_LOW  SDADDR|=((1<<SDA))
>
> Wer soll da durchblicken wenn man es schnell verstehen soll?
Dann musst du einen PIC* nehmen, da entspricht 0 einem Ausgang.

* Vielleicht gibt es auch andere µC wo das so ist, ich kenne nur den 
PIC.
Gast #4148719
Lesenswert?

Das ist noch mehr Grütze drin ;-( Frage mich manchmal was die Leute 
machen, die ihren Kot ins Netz blasen ohne richtig zu testen.

void i2c_init()
{
  SDAPORT&=(1<<SDA);
  SCLPORT&=(1<<SCL);

  SOFT_I2C_SDA_HIGH;
  SOFT_I2C_SCL_HIGH;

}

muss

void i2c_init()
{
  SDAPORT&= ~(1<<SDA);
  SCLPORT&= ~(1<<SCL);

  SOFT_I2C_SDA_HIGH;
  SOFT_I2C_SCL_HIGH;

}

heissen, sonst sind die anderen Bits auch platt.
Gast #4148752
Lesenswert?

Das ist doch (bis auf die üblichen Flüchtigkeitsfehler) eine gute 
Grundlage. Es hat was man "wartbar" nennt.
Hat der Mitbastler aus Indien sich eigentlich irgendwie zur Bug-Freiheit 
seines Geschenks verpflichtet?
#4149058
Lesenswert?

@Christian J.

Ich finde es bedenklich, dass du hier Code anbietest, der nicht von dir 
stammt und ein Copyright, offenbar von einer Firma, enthält. Damit 
bewegst du dich auf sehr dünnem Eis. Falls der Copyright-Inhaber den 
Quelltext unter einer Open-Source-Lizenz veröffentlicht hat, dann pack 
die Lizenz mit dazu. Falls nicht, dann bitte einen Moderator den Thread 
zu löschen.
Gast #4149084
Lesenswert?

Konrad S. schrieb:
> Ich finde es bedenklich, dass du hier Code anbietest, der nicht von dir
> stammt und ein Copyright, offenbar von einer Firma, enthält. Damit
> bewegst du dich auf sehr dünnem Eis.

Liegt sicher kein Patent drauf, zumindest auf den Fehlern nicht :-) Ist 
mir auch wurscht, Indien ist weit weg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren