Ich möchte mit Soft-PWM acht einzeln überwachte Akkus an ihre Ladschlussspannung bringen und dort halten. Der jeweilige PWM-Ausgang geht über 5,6KOhm auf die Basis eines BD238 (NPN). Der Kollektor bekommt 5V Versorgungsspannung und der Emitter ist am Pulspol des Akkus angeschlossen. Der Minuspol des Akkus wiederum an Masse. Die ADC-Wandlung für den Akku liegt am Pluspol des Akkus. Das ganze klappt mit einer ADC-Wandlung auch sehr gut. Sobald aber eine zweite ADC-Wandlung dazu kommt wird das Programm so langsam das man die Pulse der PWM mitzählen kann. Im GCC bin ich nicht fündig geworden. Verwendet wird AVR-Studio 4.15; Pony-Prog 3.07a Beta; ATmega 16 16Mhz auf einem Pollin-Evaluationsboard Die Fuses sind richtig, da andere Programm in der richtigen Geschwindigkeit ablaufen. Vielleicht kann mir jemand mal auf die Sprünge helfen, denn ganz so fit bin ich noch nicht in der µC-Materie.
Splitte dein Programm in Funktionen auf! Es ist doch Unsinn zb. den ADC Code 8 mal im Programm zu haben, wenn alles was sich ändert, die Kanalnummer ist. Da kann man auch eine Funktion schreiben, die die Kanalnummer erhält und den Messwert zurückliefert (die simple Variante). Des weiteren willst du dich unbedingt über Timer informieren! So ein Timer kann in regelmässigen Zeitabständen eine Funktion ausführen (die sog. Interrupt Service Routine oder ISR) In der ISR kannst du deine PWM unterbringen und du kannst dort auch die ADC Wandlung eines Kanals anstossen, die du im nächsten ISR Aufruf auswertest. Bei jedem ISR Aufruf kommt reihum der nächste Kanal drann. Oder: Der ADC kann dich aber auch selbst über ein fertiges Wandlerergebnis mit einem Interrupt informieren, woraufhin in der zugehörigen ISR auf den nächsten Kanal geschaltet wird und die nächste Wandlung angestossen wird. Kurz und Knapp: Dein ganzer jetziger Programmaufbau ist Sch.... So wirst du nicht zum Ziel kommen. Möglichkeiten gibt es viele, aber so gut wie alle führen über Interrupts und ISR. Nur so kannst du erreichen, dass dein Programm mehr oder weniger x-Dinge 'gleichzeitig' macht.
Danke für die schnelle und ehrliche Antwort. Kannst du mir eine Starthilfe für ISR und Splitten geben?
War wieder zu einfach mal dort nachzuschauen. Habe mir die entsprechenden Artikel durchgelesen, komme aber nicht so wirklich weiter da die meisten Beispiele in Assembler sind. Klar ist, das Programm soll geteilt werden. Ich denke, da die PWM-Regelung auf den PORT's PC0 bis 7 Zeitkritischer ist als die AD-Wandlung, sollten die ADC's per Interupt gestartet werden. Oder können beide ausgegliedert werden? Wie fange ich das Ganze an? Soviel Erfahrung habe ich leider noch nicht. Ein einfaches Beispiel zum Anschauen wäre nicht schlecht.
>War wieder zu einfach mal dort nachzuschauen. >Habe mir die entsprechenden Artikel durchgelesen, komme aber nicht so >wirklich weiter da die meisten Beispiele in Assembler sind. Dann nimmst du halt das hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.