Habe ein kleines Betriebssystem für den Tiny 13 geschrieben, das einen Timerinterrupt mit Blinkled, PWM und AD-Wandlung abdeckt. Vielleicht erspart es jemanden etwas Arbeit bei der Inbetriebnahme des Tinys. SG Josef
Hi, kleiner Verbesserungsvorschlag zum Togglen der LED. Die neuen µC bieten die Moeglichkeit durch setzen des PINx den Port zutogglen. Mfg Dirk
Hi, kleines Bsp.: #define Tog_Bit(Byte,Led) Byte ^= (1<<Led) Tog_Bit (PORTB,4); //Systemled durch die neue Funktion kann man das verbesseren. #define Tog_Bit(Byte,Led) Byte |= (1<<Led) Tog_Bit (PINB,4); toggelt Portb.4 Mfg Dirk
Guter Trick, um Code fehleranfällig und nichtportabel zu machen. Ich hab jedenfalls keine Lust, mir nen Wolf zu suchen, warum solcher Code plötzlich auf einem Mega8 oder 8051 oder ARM oder sonstwas nicht läuft. Ich schreib Sachen immer so hin, wie sie logisch richtig sind. Bauteilabhängige Optimierungen sind allein Sache des Compilers. Peter
Hi, leider weiss ich nicht wie AVR GCC mit diesen neuen Funktionen um geht. >Guter Trick, um Code fehleranfällig und nichtportabel zu machen. Das Problem sollte sich mit guten Praeprozessoranweisungen realiseren lassen. Das gleiche Problem hat man sonst auch mit Registernamen. Diese sind auch nicht ueberall gleich. Mfg Dirk
Das ist richtig, dafür gibt es aber mindestens eine Abstraktionsschicht, die man auch relativ simpel implementieren kann. Ich bin ebenfalls der Ansicht, daß man so etwas dem Compiler überlassen sollte, oder in diesem speziellen falle wirklich Assembler/inline Assembler verwenden sollte. Und das dann auch wirklich erst in der Abstraktionsschicht. ...mein Senf... :)
Hm, jetzt bin ich grad noch über etwas verebesserungswürdiges gestolpert: Du könntest noch dazu schreiben, für welchen Compiler das geschrieben wurde.
Geschrieben natülich für Codevision. Das Toggelmakro muß ich nochmals erklären: Bei jedem Aufruf des Makros wird der momentane Zustand des Bits geändert. Is es high wird es low und umgekehrt. Das funktioniert auch mit char-Variabeln. Das heist, du kannst 8 Bits in nur einer char Variable unterbringen. SG Josef
Feine Idee das Betriebssystem, aber hat jemand schon sowas für assembler geschrieben??? Wie wäre es noch eine serielle Datenübertragung einzbauen??? MFG
Hallo allerseits das mit dem PINx und toggeln kann ich nicht nachvollziehen und erscheint mir auch ziemlich überflüssig. Man kann doch auch schreiben: PORTx ^= (1 << BIT_NR); oder in der übrigen Welt gebräuchlicher PORTx ^= BIT_MASK; Das sollte mit jedem C-Compiler und jedem Controller funktionieren. Grüsse Joe
Es geht darum, daß ein PORTx ^= (1 << Px3); Nicht in eine Read-Modify-Write-Orgie, sondern in sbi PINx, (1 << Px3) übersetzt wird. Und das ist nunmal aufgabe der Compilerhersteller...
Ich glaube eher, daß Du nicht verstanden hast, worum es ging ;) Siehe Datenblätter neuere AVRs, sbi auf PINx. Wobei das 'x' für den Index steht, zb A oder B.
"aber hat jemand schon sowas für assembler geschrieben???" naja, nicht genau das, aber... http://www.mikrocontroller.net/forum/read-1-240578.html
Danke Josef, du hast mir unendlich viel Arbeit erpart ! Das System läuft wunderbar ! SG Hotzplotz
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.