Datum: 23.10.2003 23:57
Gerade Anfänger haben oft das Problem, das erstmal alles wunderbar läuft, aber plötzlich muß noch irgendwo gewartet werden. Und ruchzuck ist die Performance im Eimer, aber der MC soll doch noch so viele andere Sachen auch erledigen. Wie macht man das also, Warten ohne Rechenzeitverschwendung ? Eine mögliche Lösung ist der hier vorgestellte Scheduler. Das Programm wurde mit WINAVR auf einem ATMega8 compiliert und belegt etwa 900 Byte. In dem Zip-File ist die Beschreibung und alle Source-Files. Viel Spaß damit. Peter
Datum: 25.10.2003 14:11
Nachtrag: So ein Scheduler hat natürlich auch seine Einschränkungen. Im Beispiel wird er alle 65536 Zyklen ausgeführt, d.h. die Main-Loop sollte in der Regel in dieser Zeit mindestens einmal durchlaufen worden sein. Dauert sie manchmal länger ist das meist auch kein Beinbruch. Exakte Zeiten, wie z.B. Uhrzeit+Datum, Frequenzmessung sollte man deshalb nicht im Scheduler sondern direkt im Timerinterrupt machen. Wichtig ist also voher eine grobe Abschätzung der maximalen und minimalen Zeitintervalle zu machen. Im Beispiel ist die minimale Zeit: 1 / (11,0592MHz 256 256) = 5,9ms. Das ist relativ schnell (das Beispiel hat ja fast nichts zu tun), meistens sollten aber Zeiten von 100ms...500ms ausreichend sein. Die maximale Zeit ergibt sich daraus, daß der Delayzähler 16-Bittig ist, zu 65536 * 5,9ms = 6,4min. Im main.h kann der Delayzähler als 8-, 16- oder 32-Bittig festgelegt werden. Das hat dann Einfluß auf die Codegröße sowie die Größe der Liste im RAM. Für ein ordnungsgemäßes Funktionieren des Schedulers ist zu beachten, daß man auch versteckte Wartezeiten vermeiden sollte. Z.B. ist zu empfehlen, für die UART Sende- und Empfangspuffer anzulegen, die dann im UART-Interrupt gefüllt bzw. geleert werden. Das hängt aber immer auch von der konkreten Anwendung ab. Z.B. je 10 Bytes bei 115200Baud im Pollingmode zu senden, dürfte kaum einen kritischen Zeitverbrauch bewirken. Ein Scheduler ist also auch kein Zaubermittel, aber für komplexe Zeitsteuerungen (z.B. Lichteffekte) fast unschlagbar einfach. Peter
Datum: 16.02.2005 09:16
Hallo Peter, muss man erst hingelinkt werden... http://www.mikrocontroller.net/forum/read-1-155162... Klasse Idee, hatte ich schon mal aufm AVR Seminar was von gehört. Sehe ich mir gerne mal an. Danke (876ter DL) AxelR.
Datum: 20.06.2005 20:34
Hallo Peter, da ich auf der Suche nach einer Guten Entprell variante in C Suche bin ich auf diese Seite gestossen! Leider bin ich noch anfänger um komme mit dem Code überhaupt nicht zurecht er ist halt einfach zu komplex! Im Prinzip möchte ich nur einen Port als Eingschalten bzw. Port B und dann mit den Einzelnen Pins bei Betätigung einen Funktion aufrufen oder variablen um 1 erhöhen, leider geliegt es mir nicht den Code so aus einander zu nehmen das ich ihn benutzen kann! Ich wäre dir echt dankbar wenn du gerade für anfänger dieses Thema nochmal bearbeiten könntest da das entprellen ja fast das wichtigste ist was man am anfang benötigt! Vielen Dank Tina
Datum: 20.06.2005 22:08
@Tina die Schedulerfunktion laß einfach links liegen. if( get_key_press( 1<<LED0 ) ) testet ein Bit (gedrückte Taste) und löscht es. Zur Funktion der Tastenerkennung und Entprellung steht hier was: http://www.mikrocontroller.net/forum/read-4-20549.html#new Peter
Datum: 17.11.2005 19:16
Hallo, vielen Dank für ds wirklich schöne Codestück - schon die Entprellroutine ist toll, die Timer sind ebenfalls sehr nützlich. Dennoch ein Verbesserungsvorschlag: der Code initialisiert den PortC nicht, schaltet also auch die Pullups nicht ein. Out-of-the-zip hat das bei mir sehr schöne Random-Muster zur Folge gehabt - gegen völlig wild schwingende Eingänge hilft eben auch 4-fach Abtastung noch nicht. Aber kaum macht man es richtig, da funktioniert es auch. hase
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel