Stefan B. schrieb:
> Atmega8 könnte ich per Software und Hardware testen. Atmega168 nur per
> Software (Simulator).
>
> Ich persönlich wäre bei einem µC-Typ geblieben - bei zwei verschiedenen
> muss man IMHO zu oft die Toolchain umstellen und ein Datenblatt mehr
> wälzen.
>
> Fürs Testen wären komplette Quellcodes für den Slave (ATmega8?) und den
> Master (ATmega168?) sinnvoll. Die Schnippsel oben sind nicht fehlerfrei
> kompilierbar.
>
Zwei gleiche Mikrocontroller stehen leider nicht zur Verfügung. Da ich
mit Eclipse arbeite kann man zwei Projekte gleichzeitig, mit den
jeweiligen Einstellungen, bearbeiten. Das Hin- und Herswitchen stellt
hier kein Problem dar, da sich AVRDude nur das aktive Projekt flasht und
auch prüft ob die Signaturen übereinstimmen - da machen sich zwei
unterschiedliche Controller ausgezahlt :-) - und nur das jeweilige
selektierte File und das dazugehörige Projekt kompilliert werden. Ich
denk mal die Methode ist ziemlich sicher...
Die Codes werden bei mir fehlerfrei kompilliert. Wo hakts denn bei dir?
Master soll der Atmega8 werden und Atmega168 der Slave.
> Mit
>
>> for(volatile unsigned long i = 1; i < 30000; i++);
>
> hast du eine Taktraten- und Toolchain-abhängige Zeitschleife drin, die
> ich so nicht implementieren würde. Ich würde hier ein _delay_ms() aus
> der Library verwenden.
Die Länge der Pause ist hier meiner Meinung nach für den Mikrocontroller
unerheblich. Gewünscht ist dass überhaupt eine Pause ensteht und das
Oszilloskop genau auf die Startbedingung Triggern kann.
>
> Die Frage nach der Taktrate ist noch offen. Nur bei Kenntnis der
> Taktrate kann man abschätzen, ob deine magische Zeile TWBR = 18;
> sinnvoll ist.
>
Sorry habsch vergessen... 8Mhz
> Pi*Daumen rät man anhand dieser Zeile dass Master und Slave mit einer
> Taktrate F_CPU um die 5,2 MHz arbeiten müssten, um auf eine SCL-Speed
> von 100 kHz zu kommen; 400 kHz sind schon außerhalb der Spezifikation
> (20,8 MHz).
Da hab ich wohl einen Fehler gemacht. Ich bin davon ausgegangen dass die
Taktfrequenz des TWI ziemlich egal ist, sondern nur gleich sein muss.
Wäre für TWPS=0 und Fcpu=8Mhz und Ftwi=100mhz die Einstellung nach
TWBR = (CPU/SCL - 16) / 2
TWBR = 32
richtiger?
Vielen Dank für die Hilfe,
der Benny.