Abend zusammen,
ich versuche nun schon seit ein paar Tagen (C-Newbie) den folgenen
"LED-PWM-Controller" ans laufen zu bekommen:
Beitrag "18- Kanal PWM Controller TWI(IIC)Interface FW. V.3"
Zuerst habe ich ein Programm mit MikroC geschrieben (Projektarchiv im
Anhang). Folgendermaßen siehts aus:
1 | void main()
|
2 | {
|
3 | int a = 0x00;
|
4 | TWI_Init(100000); // initialize TWI communication
|
5 |
|
6 | while(1)
|
7 | {
|
8 | TWI_Start(); // issue TWI start signal
|
9 | TWI_Write(0x02); // send byte via TWI (device address + W)
|
10 | TWI_Write(0x0D); // send byte (address of EEPROM location)
|
11 | TWI_Write(a); // send data (data to be written)
|
12 | TWI_Stop(); // issue TWI stop signal
|
13 |
|
14 | a++;
|
15 | Delay_10ms();
|
16 | }
|
17 | }
|
Im Grunde total einfach. TWI starten, Adresse, Register und Wert
schicken, Wert um eins erhöhen und wieder von vorne. Bewirkt beim LED
Controller dass eine LED immer hoch-dimmt bis zum Maximalwert und dann
wieder von vorne anfängt -> Funktioniert auch tadellos.
Jetzt will ich das ganze in ein anderes Programm einbauen. Schön dachte
ich mir, krall ich mir das Header-File vom TWI aus dem Programm was ja
irgendwo im Mikroelektronika-Ordner liegen wird. Allerdings hat der
Hersteller der Entwicklungsumgebung seine Headerfiles irgendwie so
geschrieben dass ich damit mal garnichts anfangen kann.
Dann habe ich versucht mit Peter Fleurys TWI Libary weiter zu kommen.
Das Makefile habe ich einfach mal auf ATmega32 geändert und folgendes
Programm geschrieben:
1 | int main(void)
|
2 | {
|
3 | i2c_init();
|
4 | lcd_init();
|
5 | lcd_clear();
|
6 |
|
7 | while(1)
|
8 | {
|
9 | lcd_print(0,0,"1");
|
10 |
|
11 | i2c_start_wait(0x02 + I2C_WRITE);
|
12 | i2c_write(0x0D);
|
13 | i2c_write(0xFF);
|
14 | i2c_stop();
|
15 |
|
16 | lcd_print(0,0,"2");
|
17 | _delay_ms(2000);
|
18 | }
|
19 | }
|
Zu Debug-Zwecken habe ich mal ein LCD mit eingebaut (habe leider keine
Möglichkeit auf Hardware-Debugging). Auf diesem bleibt aber immer eine
"1" stehen. Heißt für mich dass der Controller in irgendeiner
Unterroutine "aufhängt". Ich hänge das ganze Archiv mal an. Ich glaube
(wie gesagt Newbie), dass der die Masterroutine eine Antwort erwartet
die sie nicht bekommt. Wäre nett wenn mal jemand drüber gucken würde.
Oder kennt vllt jemand noch eine Alternative zu Peter Fleurys Routine?
Habe schon sehr viel gegooglet und das Forum hier bis zum Ende
durchforstet aber im Grunde beruht fast alles auf Fleurys Routinen.
Alles was ich will sind drei Werte zu versenden mit einem Atmega32 bei
16Mhz und 100kHz I2C Frequenz. Adresse, Register und Wert.
So verzweifle ich wie man vllt merkt...
Ich hoffe auf eure Hilfe und schonmal vielen Dank schonmal im vorraus!
Chriss