baumagnat
04.08.2009, 10:37
Hallo an alle,
Ich brauche mal eine kurze Hilfe in sachen Interrupt Programmierung.
Kurze Vorgeschichte:
Ich habe mehrere AVRmega32 aneinander gekettet. Davon ist einer der Master und die anderen Slave. Alle Slave haben eine eindeutige Adresse und werden von dem Master über einen eigens geschaffenen Bus nacheinander fortlaufend abgefragt. Das klappt mit einer WHILE {FOR-Schleife} auch prima.
Jetzt das Problem:
Um die Daten auszuwerten brauche ich eine möglichst genaue Zeitangabe.
Dies habe ich versucht durch einen externen CMOS4060 zu schaffen der mir einen 1ms Takt am Master als Eingang bringt. Diesen frage ich zwischendrin immer wieder ab und zähle die Takte mit bis der Master alle Slave abgefragt hat und werte dann die Daten aus (zähler wieder auf NULL). Jetzt habe ich mal mitgestopt und festgestellt das mir ca. 5-8% der Takte verloren gehen. Ich lese immer wieder über Interrupts habe damit aber keinerlei Erfahrung da ich eher ein ab und zu Programmierer bin. Man soll Takte auch intern genau verwalten können habe ich gehört (dann könnte ich den 4060 weglassen). Für diese Probleme (ob intern oder extern) und wie man sie löst bräuchte ich mal eine möglichst exakte Lösung in C wie und wo man Interrupts zählt (inkl. allem was ich einstellen muß (ich setze zurzeit in PonyProg keine Harken)). Der Takt sollte später möglichst schnell sein um die Genauigkeit zu erhöhen. Hauptsache das Ergebnis stimmt. Warum mir Takte fehlen kann ich mir schon vorstellen. Das liegt bestimmt an dem Senden und Empfangen des Masters (Wartezeiten) und der Darstellung auf dem Display.
Danke für eure Hilfe!!! Für euch ist das bestimmt kein Problem.
Ich brauche mal eine kurze Hilfe in sachen Interrupt Programmierung.
Kurze Vorgeschichte:
Ich habe mehrere AVRmega32 aneinander gekettet. Davon ist einer der Master und die anderen Slave. Alle Slave haben eine eindeutige Adresse und werden von dem Master über einen eigens geschaffenen Bus nacheinander fortlaufend abgefragt. Das klappt mit einer WHILE {FOR-Schleife} auch prima.
Jetzt das Problem:
Um die Daten auszuwerten brauche ich eine möglichst genaue Zeitangabe.
Dies habe ich versucht durch einen externen CMOS4060 zu schaffen der mir einen 1ms Takt am Master als Eingang bringt. Diesen frage ich zwischendrin immer wieder ab und zähle die Takte mit bis der Master alle Slave abgefragt hat und werte dann die Daten aus (zähler wieder auf NULL). Jetzt habe ich mal mitgestopt und festgestellt das mir ca. 5-8% der Takte verloren gehen. Ich lese immer wieder über Interrupts habe damit aber keinerlei Erfahrung da ich eher ein ab und zu Programmierer bin. Man soll Takte auch intern genau verwalten können habe ich gehört (dann könnte ich den 4060 weglassen). Für diese Probleme (ob intern oder extern) und wie man sie löst bräuchte ich mal eine möglichst exakte Lösung in C wie und wo man Interrupts zählt (inkl. allem was ich einstellen muß (ich setze zurzeit in PonyProg keine Harken)). Der Takt sollte später möglichst schnell sein um die Genauigkeit zu erhöhen. Hauptsache das Ergebnis stimmt. Warum mir Takte fehlen kann ich mir schon vorstellen. Das liegt bestimmt an dem Senden und Empfangen des Masters (Wartezeiten) und der Darstellung auf dem Display.
Danke für eure Hilfe!!! Für euch ist das bestimmt kein Problem.