Die Schreibweise mit dem 2:0 steht für die Bits 0 bis 2. In dem Beispiel (CSn2:0 = 7) also das CSn2, CSn1 und CSn0 zusammen als Binärzahl interpretiert 7 ergeben, also alle 3 Bits auf 1.
Die Schreibweise mit dem 2:0 steht für die Bits 0 bis 2. In dem Beispiel (CSn2:0 = 7) also das CSn2, CSn1 und CSn0 zusammen als Binärzahl interpretiert 7 ergeben, also alle 3 Bits auf 1.
Hallo,
@ Besserwissi : Das hört sich plausibel an. Jetzt kann man das auch verstehen. 1, 2, 3 --- BIN 111, DEZ 7, HEX 7. Komische das so zu schreiben aber OkDanke
@ Wsk8: Danke erstmal für den Code. Hab in bei meinem ATtiny ausprobiert aber leider ohne Funktion. Keine Fehler im Code aber eine Warnung "TIMER0_COMPA_vect" appears to be
amisspelled Signal handler [enabled by default].
Mittlerweile nach den Tutorials und dem Datenblatt vom ATtiny84 bin ich zu folgender Lösung gekommen (wie macht man das Codefenster?)
8 Bit Timer0, Vorteiler 8, 125ms interupt.
Code:
[-------------------------------------------------------------------------------------------------------------------------
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
volatile unsigned int millisekunden;
int main(void)
{
TCCR0B = (1<<WGM02) && (1<<CS01); // CTC Modus, Vorteiler 8, // ((1000000/8 )/1000) = 125
OCR0B = 125-1; // TCNT0 = OCR0A = 125-1
TIMSK0 = (1<<OCIE0B);
sei();
while(1)
{
}
}
ISR(TIMER0_OVF_vect)
{
millisekunden++;
if(millisekunden == 1000)
{
DDRA = 0x06;
}
}
]------------------------------------------------------------------------------------------------------------------------------------------------
Dieser Coder erzeugt aber auch eine Warnung "TIMER0_OV_vect" appears to be amisspelled Signal handler [enabled by default].
Wenn man nur irgendwo mal ne Lister aller ISR Befehle hätte... kann sein das mein µC den Befehl nicht bearbeiten kann oder so.
Wenn ich nur wüsste ob TCCR0B & OCR0B zueinander stimmen den im Netz wird TCCR0A verwendet???
Gibt es den Timer0 A und Timer0 B?
Kann jemand nochmal helfen???
Verstehe es nicht![]()
![]()
?????????????????
Geändert von ooweberoo (02.03.2014 um 08:57 Uhr)
In meinem Code gibts aber kein "TIMER0_COMPA_vect"Keine Fehler im Code aber eine Warnung "TIMER0_COMPA_vect" appears to be amisspelled Signal handler
wie macht man das Codefenster?
Im Editor "#" anklicken
Da in deinem Code auch nichts initialisiert ist, wirst du auch vermutlich nichts sehen. LED etc um eine Änderung wahrzunehmen wäre nicht schlecht...
mfg
Geändert von Wsk8 (28.02.2014 um 23:16 Uhr)
Die Liste der zur verfügung stehenden Interruptvektoren steht bei GCC in den µC spezifischen files, die über eine paar Umwege (den µC aus der Umgebungsvariable suchen) eingebunden werden, über #include <avr/io.h>
Für den Tiny84 ist das File
iotnx4.h Im Verzeichnis von GCC avr/Include/avr/ - die Interruptvectoren stehen ganz unten im File.
Der gesuchte ist hier TIM0_COMPA_vect bzw. TIM0_OVF_vect . Wieso da jemand die Namen ander als etwa beim Mega32 gewählt hat, kann ich auch nicht sagen - ist irgendwie unpraktisch.
Ich finde, du musst viel ruhiger werden. Oberallgeier hat dir so ein top Beispiel gegeben. Versuch das doch einfach mal zu verstehen. Druck es aus, wenns dir hilft, lösche halt die Zeilen raus, die dich stören, aber versuche zu verstehen, was dort eigentlich passiert. Hier alles mit unbrauchbar zu betiteln, nur weil es nicht speziell für dich geschrieben ist, ist schon ziemlich anmaßend. So viele Leute, die mit den Datenblättern zurecht kommen und es stimmt, AVR Datenblätter sind ansich gut aufgeräumt. Versuche einfach mal den Code von Oberallgeier zu verstehen, versuche herauszufinden, welche Infos er aus dem Datenblatt hat, und wo sie stehen. Wenn du einzelnes nicht findest, darfst du hier gern nachfragen, da gibt es dann Hilfsbereite, die dir sagen, wo du es findest. Und ganz schnell wirst du feststellen, das alles doch ganz logisch aufgebaut ist. C hat mit AWL einer sps nunmal rein gar nix zu tun. Evtl hilft es auch, wenn du erstmal ein reines C-Tutorial ansiehst, zumindest die ersten paar Themen, das du erstmal C-spezifische Dinge verstehst, und dann später kannst du dich mit den Besonderheiten des C eines AVR's bekannt machen.
Die Begriffe sind auch im Datenblatt zu finden, unter der Kategorie Interrupts. Es war also Atmels Idee mit den unterschiedlichen Namen.
Dennis
Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine
Hallo,
@Wsk8: Zunächstmal Danke aber ich kann kein # finden.hier mal ein Bild von meinem Editor Menue. Wo ist da die Raute?
Mein AVR Studio schlägt mir immer "TIMER0_COMPA_vect" vor, dachte dann würde es den Befehl auch geben. Aber dein Timer Beisiel war trotzdem sehr
hilfreich für mich.
@Besserwissi: Danke für die info. Bei mir muss das ein anderer Ordner sein, diese Verzeichnisse gibt es bei mir nichtTIM0_COMPA_vect bzw. TIM0_OVF_vect
erzeugt gerade keine Fehler oder Warnungen. Ich probiere und melde mich dann nochmal.Danke !
@derNeue: Danke! Ja es ist ein sehr gutes Programm.
Geändert von ooweberoo (04.03.2014 um 09:29 Uhr)
Es ging um Deine Frage wie ein Codefenster aufgemacht wird.... ich kann kein # finden ...
Kollege Wsk8 hatte Dir dazu geraten "Im Editor "#" anklicken".Code:Dies ist ein Codefenster
Es gibt in meinem Browser bei seiner Funktion als Beitragseditor fürs Forum in der zweiten von drei Befehlszeilen ganz rechts die Buttons [#] [<>] und [php]. Dies gilt für die "Standardansicht" - wenn im Fenster "Direkt antworten" nur eine Befehlszeile offen ist, dann rechts unten auf [Erweitert] drücken. Und dieses "#" hatte WSK8 gemeint *gg*.
Dann ist möglicherweise im Studio der falsche Controller angewählt oder sonst etwas nicht im Lot; im Datenblatt zum tiny84, doc 8006K–AVR–10/10, Seite 48, stehen nämlich als Vector 10 und 12 in der Spalte Source genau diese ISR-Adressen.... Mein AVR Studio schlägt mir immer "TIMER0_COMPA_vect" vor ...
Geändert von oberallgeier (04.03.2014 um 13:58 Uhr) Grund: neueste Doc referenziert
Ciao sagt der JoeamBerg
@ oberallgeier: achso... bei erweitert wie versteckt. Naja wenigstens weis ich jetzt um die ISR Befehle... aber der entweder der Timer 0 wird nicht aktiviert oder der Interupt funktioniert nicht.
Code:#include <stdlib.h> #include <avr/io.h> #include <avr/interrupt.h> #define F_CPU 1000000UL volatile unsigned int millisekunden; //-------OB1-------------------------------------------------------------------------------------------------------------------- int main(void) { //---8 Bit Timer CTC Modus--- TCCR0B = (1<<WGM02) && (1<<CS01); // CTC Modus, Vorteiler 8, // ((1000000/8)/1000) = 125 OCR0B = 125-1; //TCNT0 = OCR0A = 125-1 TIMSK0 = (1<<OCIE0B); // Interups EIN sei(); while(1) { } } //------DB1------------------------------------------------------------------------------------------------------------------------ ISR(TIM0_COMPA_vect) { millisekunden++; if(millisekunden == 200)//1000 { DDRA = 0x06; } }
weis auch nichtmehr weiter.... je länger ich schau desto verwirrter werde ich...TCCR0B = (1<<WGM02) stimmt das nun, oder doch TCCR0A = (1<<WGM01)
vielleicht sollte ich doch den 2313 bestellen, mit dem arbeiten wenigstens Leute die dann eventuell schon wissen wie die Timer dort funktionieren..<<<der ist so geil...
Lesezeichen