Minkfeld
04.12.2009, 13:39
Hallo zusammen,
Ich habe jetzt schon ein paar nette Projekte mit nem Nunchuk +
Controller gesehen und hab mich gestern mal dran gemacht meinen
umzubauen.
Hardware: STK500 + ATMega88 + JTAGICEmkII + 8MHz Quarz
Betriebsspannung: 3,3V
Verbindungen: SDA(PC4) an Grüne Leitung Nunchuk mit 2,2kOhm Pullup
SCL(PC5) an Gelbe Leitung Nunchuk mit 2,2kOhm Pullup
Software in Anhang.
Prinzipiell scheint die TWI Kommunikation zu funktionieren. Jedoch
bekomm ich bei allen 6 Bytes immer nur 0xff als Wert zurück. Hab gelesen
dass dieses Problem schon mehrere Leute hatten, jedoch ne genaue Ursache
konnte keiner nennen.
Hat einer ne Idee was der Fehler sein könnte?
Gruß,
Mink
//************************************************** ***************************
//* Project: ATMega88 + WII Nunchuk *
//* Version: beta *
//* File: device.c *
//* Target MCU: ATMega88 *
//* Compiler: GCC *
//* Simulator: AVRStudio 4.17 *
//* Emulator: JTAG ICE MKII *
//* Author: Minkfeld *
//* Date: 03.12.09 *
//************************************************** ***************************
#include <stdio.h>
#include <avr/interrupt.h>
#include "General.h"
#include "Delay.h"
#include "TWI_Master.h"
unsigned int Data[8];
unsigned int test_buffer[100];
unsigned int buffer_count;
int main(void)
{
uint8_t i;
uint8_t SlaveAddress = 0x52;
DDRD = 0x08;
//init TWI Master interface with bitrate of 100000Hz
if (!TWIM_Init (100000))
{
while (1);
{
;
}
}
//do a handshake with the nunchuk
(TWIM_Start (SlaveAddress, TWIM_WRITE));
TWIM_Write (0x40);
TWIM_Write (0x00);
Delay_ms (200);
TWIM_Stop ();
//main loop
while (1)
{
//read 6 bytes from nunchuck
if (!TWIM_Start ((SlaveAddress), TWIM_READ))
{
TWIM_Stop ();
}
else
{
for (i=0;i<5;i++)
{
Data[i] = TWIM_ReadAck();
buffer_count++;
test_buffer[buffer_count] = Data[i];
}
Data[5] = TWIM_ReadNack();
buffer_count++;
test_buffer[buffer_count] = Data[5];
TOOGLE_BIT(PORTD,3);
TWIM_Stop ();
}
//write byte to request next data from the nunchuck
if (!TWIM_Start (SlaveAddress, TWIM_WRITE))
{
TWIM_Stop ();
}
else
{
TWIM_Write (0x00);
Delay_ms (200);
TWIM_Stop ();
}
}
}
Ich habe jetzt schon ein paar nette Projekte mit nem Nunchuk +
Controller gesehen und hab mich gestern mal dran gemacht meinen
umzubauen.
Hardware: STK500 + ATMega88 + JTAGICEmkII + 8MHz Quarz
Betriebsspannung: 3,3V
Verbindungen: SDA(PC4) an Grüne Leitung Nunchuk mit 2,2kOhm Pullup
SCL(PC5) an Gelbe Leitung Nunchuk mit 2,2kOhm Pullup
Software in Anhang.
Prinzipiell scheint die TWI Kommunikation zu funktionieren. Jedoch
bekomm ich bei allen 6 Bytes immer nur 0xff als Wert zurück. Hab gelesen
dass dieses Problem schon mehrere Leute hatten, jedoch ne genaue Ursache
konnte keiner nennen.
Hat einer ne Idee was der Fehler sein könnte?
Gruß,
Mink
//************************************************** ***************************
//* Project: ATMega88 + WII Nunchuk *
//* Version: beta *
//* File: device.c *
//* Target MCU: ATMega88 *
//* Compiler: GCC *
//* Simulator: AVRStudio 4.17 *
//* Emulator: JTAG ICE MKII *
//* Author: Minkfeld *
//* Date: 03.12.09 *
//************************************************** ***************************
#include <stdio.h>
#include <avr/interrupt.h>
#include "General.h"
#include "Delay.h"
#include "TWI_Master.h"
unsigned int Data[8];
unsigned int test_buffer[100];
unsigned int buffer_count;
int main(void)
{
uint8_t i;
uint8_t SlaveAddress = 0x52;
DDRD = 0x08;
//init TWI Master interface with bitrate of 100000Hz
if (!TWIM_Init (100000))
{
while (1);
{
;
}
}
//do a handshake with the nunchuk
(TWIM_Start (SlaveAddress, TWIM_WRITE));
TWIM_Write (0x40);
TWIM_Write (0x00);
Delay_ms (200);
TWIM_Stop ();
//main loop
while (1)
{
//read 6 bytes from nunchuck
if (!TWIM_Start ((SlaveAddress), TWIM_READ))
{
TWIM_Stop ();
}
else
{
for (i=0;i<5;i++)
{
Data[i] = TWIM_ReadAck();
buffer_count++;
test_buffer[buffer_count] = Data[i];
}
Data[5] = TWIM_ReadNack();
buffer_count++;
test_buffer[buffer_count] = Data[5];
TOOGLE_BIT(PORTD,3);
TWIM_Stop ();
}
//write byte to request next data from the nunchuck
if (!TWIM_Start (SlaveAddress, TWIM_WRITE))
{
TWIM_Stop ();
}
else
{
TWIM_Write (0x00);
Delay_ms (200);
TWIM_Stop ();
}
}
}