- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 3 von 3

Thema: TWI (I2C) am AVR Atmega128 macht Probleme

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2007
    Ort
    Berlin
    Alter
    36
    Beiträge
    7

    TWI (I2C) am AVR Atmega128 macht Probleme

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich versuche mit dem RnFunk128-Board das Kompassmodul CMPS03 über I2C anzusteuern. Mit der mitgelieferten BASCOM-Demo funktioniert es ohne Probleme. Da ich aber lieber in C programmiere (und Bascom unter Linux nicht funktioniert ) , habe ich ein Programm geschrieben, welches die twimaster.c von P. Fleury verwendet und zum Test erstmal die Firmwareversion des Moduls ausliest und per UART an den PC schickt. Übertrage ich das Programm auf den Controller, wird das Programm automatisch gestartet, nachdem die Programmierung abgeschlossen ist. Dann funktioniert das Programm auch. Schalte ich aber das Board aus, entferne das Programmierkabel und schalte es anschließend wieder ein, kann der Microcontroller die Version nicht auslesen, er wartet scheinbar ewig auf die Daten.
    Hier der Quellcode des Programms:

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>
    #include <string.h>
    #include <stdlib.h>
    
    #include "radio.h"
    #include "usart.h"
    #include "adc.h"
    #include "i2cmaster.h"
    #include "cmps03.h"
    
    int read_compass()
    { 
       int data;   
    
       i2c_start(0xc0);
       i2c_write(0);
       i2c_stop();
    
       i2c_start(0xc1); 
       data = i2c_readNak();   
       i2c_stop();   
    
       return data;
    } 
    
    int main(void)
    {
    	char ret;
    	int direction;
    	char msg[5];
    	ret = usart_init(B9600);
    	i2c_init();
    
    	memset(msg, 0, 5);
    	usart_send("uc code test\n\r", 14);
    	direction = read_compass();
    	itoa(direction, msg, 10);	
    	msg[3] = '\n';
    	msg[4] = '\r';
    	usart_send(msg, 5);
    	usart_send("uc code afte\n\r", 14);		
    
    	return 0;
    }
    Hoffe jemand kann mir helfen.

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Alter
    52
    Beiträge
    23

    Re. TWI Probleme

    Hallo tuxer,

    ohne deine Hardware und die Bibliothek(mein asm ist ein bischen eigerostet) zu kennen, probier ichs mal.

    Wenn ich dich richtig verstanden habe bleibt dein Progi hängen, nachdem

    usart_send("uc code test\n\r", 14);

    gesendet wurde. Wie gesagt ich kenne die Bibi net, aber es könnte sein das der Slave sein PowerUp noch nicht beendet hat und dein MC schon versucht ihn zu adressieren. Wenn dann kein TimeOut eingebaut ist könnte das hängenbleiben daran liegen.

    versuche einfach mal die Schaltung unter Spannung zu setzten und dann erst den slave zu reseten und dann den master.

    Du kannst auch mal den Bus messen! Wenn der Bus auf low ist stimmt was nicht(irgendeiner nuckelt dran). Du kannst auch in deinem Progi ein PowerUp-Wait einbauen um das zu vermeiden(Falls nach dem reseten von slave und master der bus immer noch low ist).

    wenn das nicht fruchtet, dann versuch mal rauszubekommen wo dein progi hängen bleibt.

    hoffe das hilft,


    cu martin

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2007
    Ort
    Berlin
    Alter
    36
    Beiträge
    7
    triplebit,

    vielen vielen Dank. Genau das war das Problem. Wenn ich ihn anschalte und nach einer Weile resette, dann funktioniert es.
    Nochmal herzlichen Dank.

    tuxer

Berechtigungen

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

12V Akku bauen