mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom PWM TOP-Value


Autor: jogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus der Bascom-Doku werd ich nicht schlau......

Allerdings steht im Datenblatt des ATmega8, das man bei bestimmten 
PWM-Modi einen TOP-Value setzen kann (bei Timer1).
Geht das auch in Bascom? Muss ich dazu Assembler einbinden?  - habe 
hierzu leider nirgens was gefunden.

Hintergrund:

Ich möchte am OC1a ein Rechtecksignal ca 27kHz, Tastverhältnis 1:8 
erzeugen können
Die Frequenz soll möglichst exakt eingestellt (und auch verstellt) 
werden können.

(Momentan mache ich das ganze im Timer-Modus, wobei ich die Low-Zeit mit 
Timer1 und die High-Zeit mit Pulseout festlege - ziemlich ungenau)

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Je nach Timer-Modus steht der TOP-Value in unterschiedlichen Registern.
Das kann OC1A aber auch ICR1 sein...

Du brauchst also eine Periodendauer von ca. 37µs. Die sollte man im 
CTC-Modus (Seite 86 im Datenblatt) erzeugen können bei entsprechend 
hoher Taktfrequenz.
Das Tastverhältnis kann man dann durch OC1B einstellen.

Autor: jogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und geht das in Bascom-Basic?

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und geht das in Bascom-Basic?

Weiß ich nicht. Entweder kann man in Bascom den Timer komplett manuell 
einstellen können, oder es gibt einen entsprechenden "Bauklotz".

Autor: jogi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm, dann befürchte ich, ich werde an Assembler nicht vorbeikommen - 
oder muss zumindest die register von hand setzen.

Merci für die hilfe.

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich sollte sowas auch in Bascom möglich sein.
Ein anderer Weg wäre es, C zu lernen.
(Für den Vorschlag hab ich schon so oft einen auf die Mütze bekommen...)
Allerdings stellst du ja gerade selber fest, dass Bascom seine Grenzen 
hat (die man in C nicht hat...).

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da sind die Grenzen von Bascom noch lange nicht in Sicht.
Du kannst in Bascom auf alle Register direkt
zugreifen.

Bei Timer1 sieht das z.B. so aus

Tccr1a = &B11110010
Tccr1b = &B00011000
Icr1h = 0
Icr1l = 100
Capture1 = 100
Compare1a = 80
Compare1b = 20


oder eben ASM einbinden
 z.B.

$asm
ldi r18,&b11110010
Out Tccr1a , R18
ldi r18,&b00011010
Out Tccr1b , R18
$end Asm

Gruss Gerhard

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.