(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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.