Forum: Mikrocontroller und Digitale Elektronik Atmega64 als TWI Slave programmieren


von xxx y. (xxmoyxx34)


Lesenswert?

Hallo Leute,
ich brauche dringende Hilfe.
Ich muss den Atmega64 als Slave programmieren. Er soll vom
Master(Aardvark) Daten empfangen und wieder an den Master senden. Weil
mir das Ganze aber leider sehr neu ist weiss ich nicht wie ich da
vorgehen soll :(
Kann mir da jemand helfen??

VG

von Ein Gast (Gast)


Lesenswert?

Hat die Suche im Forum nichts gebracht? Vielleicht war's der falsche 
Suchbegriff. "I2C" wäre noch ein Tipp. Beispiele gibt's genug, z.B.
Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8"

von spess53 (Gast)


Lesenswert?

Hi

>Er soll vom
>Master(Aardvark) Daten empfangen und wieder an den Master senden.

Ein Erdferkel mit TWI?

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

an dem Suchbegriff liegts denke ich mal nicht, habe mir auch schon 
vorher das angeschaut, was du mir geschickt hast. Ich brauche einen 
fertigen Code, das in Eclipse oder Atmel Studio funktioniert, damit ich 
den ganzen Aufbau nachvollziehen kann...

@spess

genau :)

von spess53 (Gast)


Lesenswert?

Hi

>Ich brauche einen
>fertigen Code, das in Eclipse oder Atmel Studio funktioniert, damit ich
>den ganzen Aufbau nachvollziehen kann...

Gibt es bei Atmel:

http://www.atmel.com/Images/doc2565.pdf
http://www.atmel.com/Images/AVR311.zip

Außerdem Datenblatt ab S.219.

MfG spess

von holger (Gast)


Lesenswert?

>Ich muss den Atmega64 als Slave programmieren. Er soll vom
>Master(Aardvark) Daten empfangen und wieder an den Master senden. Weil
>mir das Ganze aber leider sehr neu ist weiss ich nicht wie ich da
>vorgehen soll :(

Nimm einen ATega644p und benutzt den zweiten UART.
I2C ist doch Müll.

von holger (Gast)


Lesenswert?

>Nimm einen ATega644p und benutzt den zweiten UART.

Ach Shit, der ATmega64 hat ja auch zwei UARTs.
Schnell weg;)

von spess53 (Gast)


Lesenswert?

Hi

>Ach Shit, der ATmega64 hat ja auch zwei UARTs.
>Schnell weg;)

Die vom ATMega644p können aber auch SPI.

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Ich brauche einen
>>fertigen Code, das in Eclipse oder Atmel Studio funktioniert, damit ich
>>den ganzen Aufbau nachvollziehen kann...
>
> Gibt es bei Atmel:
>
> http://www.atmel.com/Images/doc2565.pdf
> http://www.atmel.com/Images/AVR311.zip
>
> Außerdem Datenblatt ab S.219.
>
> MfG spess

Zunächst mal vielen Danke für die beiden Links, aber ich krieg mehrere 
Fehlermeldungen :((


Warning  1  ignoring #pragma vector  [-Wunknown-pragmas]

#pragma vector=TWI_vect
__interrupt void TWI_ISR( void );

Warning  3  implicit declaration of function '__enable_interrupt' 
[-Wimplicit-function-declaration]

 __enable_interrupt();

Warning  4  implicit declaration of function '__sleep' 
[-Wimplicit-function-declaration]

__sleep();

Warning  5  implicit declaration of function '__no_operation' 
[-Wimplicit-function-declaration]

 __no_operation();

Warning  6  'dont_sleep' defined but not used [-Wunused-variable]

static unsigned char dont_sleep = 0;

von spess53 (Gast)


Lesenswert?

Hi

>Zunächst mal vielen Danke für die beiden Links, aber ich krieg mehrere
>Fehlermeldungen :((

Etwas Hirnschmalz musst du schon reinstecken. Die Beispieldateien sind 
für den IAR-Compiler. Da gibt es irgendwelche Differenzen zum 
GCC-Compiler. Allerdings bin ich da überfragt, da ich kein C benutze.

MfG Spess

von Frank K. (fchk)


Lesenswert?

xxx yyy schrieb:

> Zunächst mal vielen Danke für die beiden Links, aber ich krieg mehrere
> Fehlermeldungen :((

Atmel hat den IAR Compiler benutzt, Du hast wahrscheinlich einen gcc. Da 
ist die Syntax etwas anders. -> Doku anschauen. Für irgendwas musst Du 
ja auch noch da sein.

fchk

von xxx y. (xxmoyxx34)


Lesenswert?

Also ich habe für

#pragma vector=TWI_vect
__interrupt void TWI_ISR( void );

==>  ISR(TWI_vect){}

__enable_interrupt();

==>  sei();

__sleep();

==>  cli();

__no_operation();

==>  asm volatile("NOP");

eingegeben, aber ich kann trotzdem keine Daten mit dem Master 
austauschen :-/

von spess53 (Gast)


Lesenswert?

Hi

>__sleep();

>==>  cli();

Das passt mit Sicherheit nicht.

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

oh hast recht, _delay_us(); oder?

von spess53 (Gast)


Lesenswert?

Hi

>oh hast recht, _delay_us(); oder?

Nein. Mach dich mal über die Sleep-Modes schlau.

Programmieren hat nichts mit Copy & Paste zu tun.

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

es funktioniert :))))
danke danke danke euch allen, schön, dass es euch gibt :)

von xxx y. (xxmoyxx34)


Lesenswert?

spess53 schrieb:
> Hi
>
>>oh hast recht, _delay_us(); oder?
>
> Nein. Mach dich mal über die Sleep-Modes schlau.
>
> Programmieren hat nichts mit Copy & Paste zu tun.
>
> MfG Spess

hmm... low-power mode() vielleicht???

von wer sucht der findet (Gast)


Lesenswert?

xxx yyy schrieb:
> Ich muss den Atmega64 als Slave programmieren. Er soll vom
> Master(Aardvark) Daten empfangen und wieder an den Master senden. Weil
> mir das Ganze aber leider sehr neu ist weiss ich nicht wie ich da
> vorgehen soll :(
> Kann mir da jemand helfen??

So eine Frage gab es schon letztens aber für einen anderen atmega, 
sollte also bei Benutzung der Suche zu finden sein. Aber hier nochmal:

Nimm am besten eine fertige Bibliothek die du nur in dein Programm 
einbinden musst, da weißt du wenigstens, dass die Software für die 
Schnittstelle funktioniert. Hier findest du eine schon mehrfach 
getestete Lib für einen atmega als TWI-Slave: 
http://www.jtronics.de/avr-projekte/library-i2c-twi-slave.html

von spess53 (Gast)


Lesenswert?

Hi

>hmm... low-power mode() vielleicht???

Ich habe die Links nur gepostet, nicht angesehen. Du wolltest ja nur

>Ich brauche einen
>fertigen Code, das in Eclipse oder Atmel Studio funktioniert, damit ich
>den ganzen Aufbau nachvollziehen kann...

Ich hoffe, das du das auch so gemeint hast.

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

ja das habe ich auch schon getestet der hat mir aber dinge geliefert, 
die ich nicht haben wollte.. hab schon so einiges ausprobiert, aber 
irgendwie ging alles nicht bis auf das Beispiel von spess, bei dem Bsp 
weiss ich noch nicht was ich für __sleep(); in eclipse / atmel studio 
eingeben soll :-/

von xxx y. (xxmoyxx34)


Lesenswert?

ja gemeint war, dass ein Code einwandfrei in eclipse/atmel studio 
funktioniert.. weil Beispiele gibt es unendlich viele, die ich ja auch 
getestet habe... aber das was du gepostet hast macht genau das was ich 
wollte, von daher vielen dank spess :))

von spess53 (Gast)


Lesenswert?

Hi

>aber das was du gepostet hast macht genau das was ich
>wollte, von daher vielen dank spess :))

Atmel hat einen Haufen interessanter Appnotes. Ich frage mich immer, 
warum das nicht die erste Anlaufstelle ist.

MfG Spess

von xxx y. (xxmoyxx34)


Lesenswert?

tja, manchmal sucht man blind durch die Gegend, obwohl das einem vor der 
Nase steht, ist nun mal so :)

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
Noch kein Account? Hier anmelden.