Forum: Mikrocontroller und Digitale Elektronik Frage zum TWI


von Dshing S. (dshing)


Lesenswert?

Hallo,
ich versuche mich grade am TWI.
Für den Anfang will ich einen ATmega168 als Master und einen ATmega8 als 
Slave verbinden.
Der Master soll auf Knopfdruck dem Slave die Zahl 77 senden, woraufhin 
dieser eine LED an macht.

Nun hab ich am Master auch eine LED, die immer an ist, aber sobald ich 
das TWI einschalte geht die LED aus. Ich mache noch nichts anderes. Kann 
mir jemand sagen warum der PIN gelöscht wird?

Master_TWI_enable:
1
#define F_CPU 8000000
2
3
#include <inttypes.h>
4
#include <avr/io.h>
5
#include <util/delay.h>
6
#include <avr/pgmspace.h>
7
#include <avr/interrupt.h>
8
#include <util/twi.h> 
9
10
int main (void) 
11
{
12
  DDRC |=(1 << PC5);//LED
13
  DDRB &=~(1 << PB1); //Taster
14
15
  while(1)
16
  {
17
    PORTC |=(1<<PC5);
18
    
19
    if((PINB & (1<<PB1)))
20
    {
21
    TWCR =| (1<<TWEN);      
22
    } 
23
  }
24
}

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Hallo!

Tasten solltest du anders einlesen, wurde schon 1000-fach hier 
durchgekaut, mach es über ne Entprellung.

Zu deinem Problem. Nach dem Code, den du hier gepostet hast, dürfte das 
nicht passieren, aber ich denke, nach den ganzen includes, die du da 
noch hast, hast du auch noch mehr Code. Zeig den ganzen Code, TWI ist 
nun wirklich kein Geheimnis.


MfG Dennis

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dshing Sung schrieb:
> Kann mir jemand sagen warum der PIN gelöscht wird?
Kann man einen Pin löschen?

> Kann mir jemand sagen warum der PIN gelöscht wird?
Was meinst du, was auf dem PC5 bei deinem uC sonst noch angeschlossen 
ist? Braucht das TWI evtl. ein SCL Signal?

von Dshing S. (dshing)


Angehängte Dateien:

Lesenswert?

Hi,
ich hatte mir eigentlich die Codes so vorgestellt, wie im Anhang.
Aber da es nicht funktionierte hatte, habe ich mich auf die Fehlersuche 
gemacht und dabei festgestellt, dass der Portausgang immer gelöscht wird 
sobald ich das TWI einschalte.

Den Taster hab ich jetzt so entprellt, aber es bleibt beim alten.
1
while(1)
2
  {  
3
    PORTC |=(1<<PC5);
4
    _delay_ms(1);
5
    if( (PINB & (1<<PB1)) && list.schalter1==0)
6
    {
7
     list.schalter1=1;
8
    TWCR |= (1<<TWEN);    
9
    }
10
    if(a==500)
11
    {
12
    list.schalter1=0;  
13
    }
14
  }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dshing Sung schrieb:
> PORTC |=(1<<PC5);
Hat evtl. der TWI was mit dem Pin C5 zu tun?
Was steht denn dazu im Datenblatt?
1
SCL/ADC5/PCINT13 – Port C, bit 5
2
SCL, 2-wire Serial Interface Clock: When the TWEN bit in TWCR is set (one) 
3
to enable the 2-wire Serial Interface, pin PC5 is disconnected from the port 
4
and becomes the Serial Clock I/O pin for the 2-wire Serial Interface.
disconnected from the port
Klingelt da was?

von Dshing S. (dshing)


Lesenswert?

Ahhh verdammt. Ich hab die Leitungen auf die SPI Ports gelegt ^^
Dann kann das nicht gehen. Stimmt XD

Danke für den Hinweis, dann versuche ich das mal hin zu bekommen.

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.