- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 3 von 3

Thema: Problem mit der USI Start detection

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2008
    Beiträge
    9

    Problem mit der USI Start detection

    Hallo,

    ich versuche schon seit einigen Tagen die USI als TWI am Attiny2313 zum laufen zu bekommen doch irgendwie gelingt es mir nicht. Ich habe einen Atmega8 als Master und der Attiny stellt den Slave da. Als Pull-Ups habe ich jeweils 4,7kOhm Wiederstände an den Leitungen. Am Ende des Projektes sollen noch mehrere Slaves hinzukommen darum viel die Wahl auf I2C.

    Der Atmega8 spricht gutes I2C das habe ich mit einem anderen Atmega getestet. Das Problem liegt darin das die Start detection des Attiny's meinen Interrupt nicht auslöst. Ich möchte ersteinmal nur das der tiny einen START auf dem Bus erkennt. Ich sitze da schon ne ganze weile dran und wahrscheinlich ist es nur ein kleiner Fehler den ich übersehe aber langsam sehe ich die richtigen Register einstellungen vor lauter USI Artikeln nichtmehr

    Achso beide laufen mit einem 16Mhz quarz.

    Hier mal die main vom tiny. Ist noch nicht viel aber wie gesagt ich hänge ja schon bei der Start detection.
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "usi/usi.h"
    
    ISR(USI_START_vect)
    {
    	PORTD |= (1<<PD1);
    	//USISR |= (1<<USISIF);
    }
    
    ISR(USI_OVERFLOW_vect)
    {
    	PORTD |= (1<<PD1);
    	//USISR |= (1<<USISIF);
    }
    
    int main(void)
    {
    	DDRD |= (1<<PD1)|(1<<PD0);
    	PORTD |= (1<<PD1)|(1<<PD0);
    	cli();
    	initI2C();
    	i2cSetStartInterrupt();
    	sei();
    	PORTD &= ~(1<<PD1);
    	while(1)
    	{
    		PORTD &= ~(1<<PD0);
    	}
    	return 0;
    }
    Ich habe 2 LED's an PD0 und PD1 als Indicatoren fürs funktionieren.

    Und hier die zugehörige usi.c
    Code:
    #include <avr/io.h>
    /** @brief initI2C
    *
    * @todo: document this function
    */
    void initI2C()
    {
    	DDRB |= (1<<PB7);
    	DDRB |= (1<<PB5);
    	PORTB |= (1<<PB7);
    	PORTB |= (1<<PB5);
    	DDRB &= ~(1<<PB5);
    	USICR = (1<<USISIE) | (1<<USIOIE) | (1<<USIWM1) | (1<<USIWM0) | (1<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC);
    	USISR = 0xf0;
    }
    /** @brief i2cSetStartInterrupt
    *
    * @todo: document this function
    */
    void i2cSetStartInterrupt()
    {
    	USICR |= (1<<USISIE);
    }
    Geändert von radbruch (29.06.2011 um 22:46 Uhr) Grund: HTML-Tags aus dem Beitrag entfernt. (ohne Gewähr)

Ähnliche Themen

  1. Low Voltage Detection
    Von PICuin im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 22.05.2011, 22:35
  2. Problem mit Start/Stop Taster
    Von Zizibee im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 22.04.2010, 10:09
  3. RP6 Start Problem
    Von SRT im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 09.08.2008, 08:29
  4. TWI Start-Problem: ATMEGA 16, STK-500
    Von Wasserzähler im Forum C - Programmierung (GCC u.a.)
    Antworten: 0
    Letzter Beitrag: 31.12.2007, 16:38
  5. Start Problem mit übertragung über RS232
    Von zwanzischmark im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 11.03.2005, 08:54

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen