ATMega8 Rechtecksignal

OP #1195713
Lesenswert?

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
Gast #1195741
Lesenswert?

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"
Gast #1195759
Lesenswert?

@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
Gast #1196708
Lesenswert?

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.".

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren