mikrocontroller.net

Forum: Analoge Elektronik und Schaltungstechnik ATMega8 Rechtecksignal


Autor: Franz Huber (12mhz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na so schwer ist das doch nicht. Mit Timer0 die Zeit messen und alle 
1280µs PortC.0 toggeln

Autor: Franz Huber (12mhz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: kollektorstrom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: hans (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
1280 = 2560 / 2

Autor: kollektorstrom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Franz Huber (12mhz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE, dass Ihr versucht habt mich ,,aufzuklären"
(hab trotzdem keine Ahnung vom Programmieren

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
movlw    0b'00000001'
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.