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


von Robert (Gast)


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?

von Robert (Gast)


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

von AxelR. (Gast)


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

von Robert (Gast)


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

von inoffizieller WM-Rahul (Gast)


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.

von Robert (Gast)


Lesenswert?

Hallo,

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

Robert

von inoffizieller WM-Rahul (Gast)


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

von Robert (Gast)


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

von inoffizieller WM-Rahul (Gast)


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.

von Robert (Gast)


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!!!

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
Noch kein Account? Hier anmelden.