(ATMega8/32)(AVR-GCC)TWI-Slave ohne Lib

Gast #2397109
Lesenswert?

Hallo,
Warscheinlich hab ihr dies schon 100e male durchgekaut aber ich möchte 
gerne von euch schritt für schritt erklärt haben wie ich einen 
ATMega8/32 als Slave nutze (Master ist ein Lego NXT). Ich möchte also 
wissen was ich wann in die Register schreiben muss um Daten vom Master 
zu empfangen....
Danke schon mal im Vorraus ;)
Gast #2397129
Lesenswert?

Pitillo schrieb:
> Warscheinlich hab ihr dies schon 100e male durchgekaut

Ja.

Pitillo schrieb:
> ich möchte gerne von euch schritt für schritt erklärt haben wie ich einen
> ATMega8/32 als Slave nutze

Aber gefälligst schnell!!!

Pitillo schrieb:
> Ich möchte also wissen was ich wann in die Register schreiben muss um
> Daten vom Master zu empfangen....

Kannst Du von keinem erwarten.
Ein bischen Eigenleistung kann man aber hingegen von Dir erwarten.
Lese also mal das hier durch:
http://www.mikrocontroller.net/articles/AVR_TWI
Schau Dir ein paar Beispiele hier im Forum an (ein Stichwort ist vllt. 
noch die Library von Peter Fleury).

Und wenn Du dann noch Fragen hast, dann kannst Du Dich wieder melden!
Dir wird mit Sicherheit keiner hier Deine Hausaufgaben oder sonst den 
Hintern nachtragen.
Da gibts glaub ich sogar einen eigenen Thread hier.
Ach ja, der hier:
Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"

Grüße
Gast #2397203
Lesenswert?

ns gut ich hab schon  verstanden, das ich nicht grade sehr freundlich 
rüber gekommen bin......
Ich habe mich bereits mit dem Thema beschäftigt und dabei kam volgendes 
raus:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <stdlib.h>
4
#include <avr/pgmspace.h>
5
#include <avr/interrupt.h>
6
#include "main.h"
7
#include "lcd.h"
8

9

10

11
int main(void)
12
{
13
  cli();
14
    TWAR = 0x40;
15
  TWCR &= ~(1<<TWSTA)|(1<<TWSTO);
16
  TWCR|= (1<<TWEA) | (1<<TWEN)|(1<<TWIE);
17
  lcd_init();
18
  lcd_clear();
19
  lcd_setcursor(0,1);
20
  sei();
21
  lcd_string("TWDR = ");
22
  char Buffer[20];
23
  while (1)
24
  {
25
    lcd_setcursor(0,2);
26
    itoa( input, Buffer, 10 );
27
    lcd_string(Buffer);
28
  }
29
}
30

31
ISR (TWI_vect)
32
{
33
  TWCR = (1<<TWINT)|(1<<TWEN);
34
  while (!(TWCR & (1<<TWINT)));
35
  input = TWDR;
36
}
was ichhalt noch nicht ganz verstanden hab was in dem Register TWSR 
drinne steht und was ich damit machen soll....

Also nochmals entschuldigung für meinen weniger freundlichen Post, 
hoffemal dieser hier hört sich nicht auch so an?!

LG Pitillo
Gast #2397234
Lesenswert?

Dieser Post ist mirgrade ein wenig peinlich da es doch funktioniert bis 
darauf das man nicht mehrere Daten hintereinander schicken kann und das 
der verschickte Wert nicht wirklich mit dem empfangenen Wert überein 
stimmt. Könntet ihr mir vielleicht sagen was ich verändern muss damit es 
funktioniert, also ohne Störungen und so...?
LG Pitillo

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