Ich versuche gerade einen BMA020 über den I2C Bus anzusprechen.
Habe bisher alles ohne Interrupts Programmiert da ich einfach nur testen
möchte.
Nun habe ich folgendes Problem:
Zunächst stelle ich den Presacler und die Bitrate ein:
[takt ist mit dem internen oszilator auf 8Mhz eingestellt, da ich keinen
Passenden Quarz da habe ...]
[verwendeter Controller: atmega8-16PU]
1 | #define bitRate 0x08
|
2 |
|
3 | .
|
4 | .
|
5 | .
|
6 |
|
7 | void init_TWI(void)
|
8 | {
|
9 | //set bit rate
|
10 | TWBR = bitRate;
|
11 | //set prescaler
|
12 | TWSR |= (1 << TWPS1);
|
13 | TWSR &= ~(0 << TWPS1);
|
14 | //enable interrupts
|
15 | TWCR |= (1 << TWIE);
|
16 |
|
17 | }
|
Dann sende ich den Startbefehl mit
1 | TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
|
Nun muss ich ja auf das TWINT flag warten, um sicherzugehen dass der
Start befehlt ausgegeben worden ist. Das mache ich mit:
1 | while (!(TWCR & (1<<TWINT)));
|
leider kommt diese Flag nie und das Programm bleibt an der Schleife
hängen.
Jemand eine Idee woran das liegen könnte?
Noch eine frage:
Muss ich Pullups für die für SCL SDA PINS aktiviern, wenn ich keine
externen verwende oder werden womöglich die durch TWEN = 1 sowieso
eingeschaltet?
Und noch eine Frage:
wenn ich versuche die Target Spannung mit AVR studio auszulesen bekomme
ich folgende fehlermeldung:
1 | Timestamp: 2011-12-28 16:36:32.331
|
2 | Severity: WARNING
|
3 | ComponentId: 23000
|
4 | StatusCode: 0
|
5 |
|
6 | Read voltage 0,0V is outside selected device's operating range: 2,7 V to 5,5 V.
|
am µC liegt aber sicher Spannung an. Habe aber unter Board setting noch
nichts verstellt da ich keine Ahnung habe wie und wo die gespeichert
werden und ich nicht womöglich Fuses falsch setzten möchte.
Ich verwende zum Programieren ein mySmartUSB light Stick.
Bei AVR Studio wird dieser als STK500 eingebunden.
Ich vermute ,dass die Boardsetting ,also auch die Target Spannung,
normalerweise beim STK500 Board eingestellt werden können, da ich das
mit meinem stick jedoch nicht machen kann, kann ich auch nichts
auslesen.