www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik OC1A schalten trotz aktivem Compare? Wie?


Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gibt es eine Möglichkeit bei einem ATmega88 den PIN B1 (OC1A) im
Programmteil (während Interrupt) zu schalten (an oder aus), obwohl
Compare aktiviert ist?

Ich muss nämlich den PIN aktivieren, um etwas zu schalten und ihn dann
über Compare wieder auszuschalten.

Toggle kann ich nicht nehmen, da ich den PIN während eines Interrupts
schalten muss, aber dessen Zeitpunkt nicht genau vorher weiß.

Nutze zur Zeit BASCOM und damit bekomm ich´s nicht hin.

z.B. folgendes geht nicht:

$regfile = "m88def.dat"
$crystal = 8000000

Config Timer1 = Timer , Prescale = 1024 , Compare A = Set

Compare1a = 60000

Ddrb.1 = 1
Portb.1 = 0

Do

Wait 1

Portb.1 = 1

Wait 10

Loop

End


Kann man da irgenwie was zurücksetzen, um zwischendurch den
Schaltvorgang zu machen?

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso, meine hier, dass ich noch der 1 Sekunde nicht wie eigentlich
gewünscht B1 anschalten kann, sondern erst nachdem Compare ihn
einschaltet; mit ausschalten ist es ähnlich...

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest einen Comparematch erzwingen.
Geht /ging beim Mega8 im Special Function Register.
Ob das beim Mega88 auch geht, weiss ich jetzt nicht,.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe glaub ich was passendes im Datenblatt gefunden. Jetzt müsstet ihr
mir nur Helfen, das Ganze in BASCOM umzusetzten...

Und zwar ist es mit FORCE Output Compare möglich vorzeitig den PIN zu
schalten.

Siehe Datenblatt ATmega88 Seite 118 (14.6.1 allgemeine Infos zu FCO),
Seite 130 (Register, wo die verschiedenen Compare Modi definiert sind)
und Seite 133 (Register, um FCO zu aktivieren).

Wie kann ich in BASCOM diese Register gezielt ansprechen/schreiben (um
z.B. FCO zu aktivieren); bistimmt nur mit ein paar Assemblerzeilen.
Was müsste ich da schreiben (kenn mich leider gar nicht damit aus;
Befehl und Bit-Muster helfen mir bestimmt schon weiter...

Vielen Dank!

Robert

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck dir mal die Beschreibung zum Register TCCR1A an (Seite 130).
Mit den Bits COM1A0 und COM1A1 kann man das Verhalten des OCR-Pins
festlegen.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe ich gefunden, nur wie ändere ich in Bascom einzelne Bits?

Robert

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Bascom-Manual kann man auch herunterladen...
Vielleicht gibt es auch Tutorien, die sowas behandeln.
Vielleicht gibt es in BAscom sowas wie "Setbit" oder "Clearbit".

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann auch Assembler in BASCOM nehmen, ich kenn nur keine Befehle...

Wie sieht so was aus, wenn ich z.B. 10000000 in 0x82 laden will.
(0x82 ist laut Datenblatt S. 133 TCCR1C Timer/Counter1 Control Register
C)

Grüße

Robert

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1000000 binär = 128 dezimal = 80 hexadezimal
Unter der Vorraussetzung, dass man in Bascom Register mit ihrem Namen
anspricht, müsste der Aufruf also wie folgt lauten:

TCCR1C = 128

Also mit einer Dezimalzahl. Die anderen Bits muß man dann ihrem Wert
entsprechend dazuaddieren.
Wie Bascom Hexadezimal- oder Binärzahlen codiert, ist bestimmt im
Handbuch beschrieben...
[subjekte Meinungsäusserung]
Ich hab es mir irgendwann mal aus Interesse herunter geladen: 32MB
>700Seiten, nur um eine Befehlsübersicht von Bascom zu haben. Dann muß
man auch noch die Funktionen des Controllers aus dem Datenblatt
herausfinden und noch herausfinden, wie man sie am besten einsetzt.
Da lobe ich mir doch C oder Assembler, für die es im Datenblatt in der
Regel sogar Beispiele gibt.
[/subjektive Meinungsäusserung]
Zusammenfassen kann ich dazu nur sagen:
Eigne dir die Grundlagen (Vokabeln) der von dir gewählten
Programmiersprache möglichst schnell an.

Autor: Robert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warst etwas schneller al sich...

Tccr1c = &B10000000 und es funktioniert (128 auch)...

habe einfach mal das gemacht, was ich zuvor ja schon immer mit ddr und
port gemacht habe, habs nur nie mit Tccr1c und anderen getestet

Danke!!!

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.