Hallo, das ist mein erster Besuch in diesem Forum. Ich möchte eine Frequenz (Rechteck) von 32.786 Khz +- 500 an einem Pin ständig ausgeben. Kann mir jemand helfen wie das am einfachsten in C geht? Atmega 128 mfg Michael
am einfachsten nimmst du eine endlosschleife und lässt darin immer den pin umschalten und dann die nötige zeit warten... das geht allerdings nur wenn der mega128 sonst nichts anderes zu tun hat. ansonsten müsstest du dich mal etwas mit dem timern des mega128 auseinandersetzen... die lassen sich auch gut zum frequenzen erzeugen nutzen... und können sogar manche pins selbstständig umschalten, nachdem sie inmal gestartet wurden... dannn kann dein controller was anderes erledigen...
was hast du denn vor?? sieht fast so aus als wenn du den takt für eine uhr erzeugen willst... aber dafür nimmt man doch nen quarz
Hallo, der prozessor soll auch noch andere Dinge tun. Ich brauche den Takt um einen digitalen Sensor zu takten. Bisher hatte ich den Sensor an einem CC2 von Conrad am laufen, da musste man nur die frequenz einstellen und laufen lassen. mfg Michael
dann nimm nen timer. ohne den takt vom avr kann man nicht sagen wie du den timer einstellen mußt. timer im ctc mode laufen lassen und den entsprechen oc-pin toggeln lassen
Die Erzeugung einer Sekunde wird z.B. hier beschrieben: http://mc-project.de/Pages/AVR/Timer/timer.html Wie die Registerwerte für den Fall zu berechnen sind sollte nach dem Durchlesen auch klar sein :)
Hallo Michael, mit was betreibst du denn deinen Mega128. Vielleicht mit einem STK501? Wenn ja ist das ganz einfach über den Timer0 (8 Bit) zu lössen da das STK 501 schon einen Uhrenquarz aufgelötet hat. Du must dann nur das Flag für den externen Takt setzen und den Oszi über den Schiebeschalter an den Atmega ankoppeln. Flag heist AS0 im Reg. ASSR Gruß Volker
Hallo, wenn ichs jetzt richtig verstanden habe muss man folgendes tun: Atmega128 16Mhz TCCR1A = (1<<PWM10) | (1<<COM1A1); TCCR1B = (1<<CS11); OCR1A = 61; An Pin OC1 liegt 32.787 Khz an. mfg Michael
Hallo, Atmega128 mit 16Mhz ich kriegs nicht gebacken. DDRB = 0xff; //Ausgang schalten TCCR1A = (1<<WGM10) | (1<<COM1A1); //10Bit nicht invertierend TCCR1B = (1<<CS10) | (1<<WGM12); //CK/1024 OCR1A = 30; //Vergleichswert an pin oc1 sollte die frequenz anliegen, tut sie aber nicht weiß jemand was ich falsch mache? mfg Michael
Nach meinem Datenblatt ist WGM13..0 = 0101 == 8Bit fast PWM und nicht 10Bit. 0111 ist 10bit. Und CS12..0 = 001 == CLK/1 und nicht CLK/1024 -> 101. Auch nich OCR1A nachrechnen bin ich jetzt zu müde |-O
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.