HALLO! Bin ziehmlich neu hier und hab da ein Problem: Ich soll am PortC.0 ein 1:1 Rechtecksignal mit der Periodendauer 2560µs erzeugen. Geg: CPU ATMega8/CPU-Takt 12Mhz Außerdem soll nur der Timer0 verwendet werden Hab aber keine Ahnung wie ich das programmieren soll Bitte um Eure Hilfe. Wäre sehr nett,wenn Ihr mir helfen könntet. LG Franz
Na so schwer ist das doch nicht. Mit Timer0 die Zeit messen und alle 1280µs PortC.0 toggeln
Danke das du gleich geantwortet hast, aber ich hab noch einpaar Fragen: 1) wie kommst du auf die 1280µs 2.) Wie toggel ich den PortC.0 Wäre sehr nett wenn du den Code posten könntest LG Franz
1) wie kommst du auf die 1280µs _ __ _ |__| |__| | |____| Dieser Ausschnitt ist eine Periode mit etwas mehr als 2000µs. Das Signal wechselt (am Anfang), in der MITTE, und am Ende den Pegel, also alle (etwas mehr als) 1000µs. Ich weiß gar nicht wie man das erklären soll^^ Das weiß jeder Achtklässler. 2.) Wie toggel ich den PortC.0 Das wiederrum sagt dir das Datenblatt. Wenn ich mich nicht irre mit "com"
Sorry, mir ist noch was eingefallen (Bin leider kein son Crack^^) MIt PMW würde das doch sicher am saubersten gehen? Oder schießt man da eher mit Kanonen auf Spatzen?
DANKE, dass Ihr versucht habt mich ,,aufzuklären" (hab trotzdem keine Ahnung vom Programmieren
@kollektorstrom PWM wäre möglich, aber nicht auf PIN C.0 und nicht mit Timer 0. Besser wäre Ausgabe auf OC2 Einstellung toggle und Timer2 CTC 1280 µs mit clear. Kein Interrupt. Bei Rechteck 1:1 am leichtesten. gruß hans
Ich programiere keine Atmels, habe nur mit PICs zu tun. Deshalb kann ich dir leider keinen Code verraten der die Aufgabe löst. Zum Thema "Mit PWM lösen". Öhm...ja...wieso und wie wollen denn einige hier einen Rechteck mit Tastverhältnis 50% mit ner PWM nachbilden? Ist das nicht ein wenig zu umständlich. Wenn ich das oben richtig deute, benötigt man dazu auch noch Timer2, laut TE soll aber nur Timer0 verwendet werden. So würde ich es auf einem PIC machen (Wie oben ja schon angedeutet): Mit dem Timer 1280 Sekunden (2560s/2) "messen" (eigentlich zählt man ja) und dann den Zustand des gewünschten Ports Toggeln, z.B. mit:
1 | movlw 0b'00000001' |
2 | xorwf PORTA |
Was hab ich gemacht? Ganz einfach, ich hab den Accumulator mit 00000001 geladen. Dann wird der Accumulator mit PORTA Exclusiv ODER-Verknüpft, d.h. es kommt immer nur dann eine 1 heraus, wenn beide Stellen unterschiedlich sind. Das Ergebnis wird in PORTA geschrieben. Beispiel 1: PORTA = 0b'00000001', d.h. PORTA PIN 0 ist high, alle anderen low Exclusiv-Oder-Verknüpfung des Accumulator mit PORTA: PORTA 00000001 Accu 00000001 ==================== PORTA_neu 00000000 Beispiel 2: PORTA = 0b'00000000', d.h. PORTA PIN 0 ist low, alle anderen ebenfalls low Exclusiv-Oder-Verknüpfung des Accumulator mit PORTA: PORTA 00000000 Accu 00000001 ==================== PORTA_neu 00000001 So könnte man es machen. OK, man muss mit dem Timer 1280 Sekunden messen abzüglich der Zeit für das Toggeln des Pins, bei meinem obigen Beispiel bräuchte ein PIC für das schreiben der Konstante in den Accumulator, das Verknüpfen und anschließende Ausgeben an den PIN 3 Zyklen die der Zähler dann weniger zählen muss. Nehmen wir mal an der Zähler wird jede µs um eins erhöht dann muss man nur bis 1277 zählen, die letzten drei µs werden zum toggeln benötigt. Wie das genau geht bekommst du aber noch heraus wenn du dich erstmal damit beschätigst. Am Anfang steht man da vor einem riesigen Wald und sieht lauter Stämme, erst bei näherem hinschaun erkennst du Buchen, Fichten, Eichen, Espen etc.pp. So ist es auch bei der Mikrocontrollerprogrammierung. Wenn man anfängt denkt man nur "Boa, da steig ich ja nie hinter." und wenn man dann zwei/drei Tage dabei ist denkt man nur "Eigentlich ist das ja ganz tricky.".
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.