Tiny26 PWM Problem mit Setzen des Compareregisters ?

Gast #223749
Lesenswert?

hallo forianer,

untenstehender code lässt sich nicht fehlerfrei compilieren, er sagt
assignment error bei compare1a und 1b - was mache ich falsch ?

für hilfe dankbar ist

skragan

__________________________________________________

Dim A As Byte
Dim B As Byte

A = 200
B = 100


Config Timer1 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down ,
Compare B Pwm = Clear Down

Enable Timer1
Enable Interrupts

Compare1a = A
Compare1b = B

Do

Toggle Led_gelb
Waitms 300

Loop
Gast #223751
Lesenswert?

Du hats dem Compiler auch nicht gesagt wieviel Bit dein PWM haben soll
Und den Port als ausgang sehe ich auch nicht.

Probier mal das:

=================================

Dim A As Byte
Dim B As Byte

A = 200
B = 100

Ddrb.1 = 1        'Port b.1 als Ausgang.

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B
Pwm = Clear up ,Prescale = 64  'PWM =8 ist neu

Compare1a = A
Compare1b = B
Gast #223752
Lesenswert?

Hoppla,vergessen.

Der Befehl "Dbrb.1=1 ist nicht unbedingt nötig und dient nur der
sicherheit falls man den Port noch anderweitig nutzt.

Wichtig ist nur das "PWM = 8" in der Config.

Ohne läuft nix.
Gast #223753
Lesenswert?

vorab schonmal danke, jedoch:

der tiny 26 hat nur eine 8bit pwm - gebe ich den befehl in die zeile
mit ein, kommt unknown config parameter [pwm].

wegen data direction:

Config Portb = Output                                       'LED´s /
ISP
 stand weiter oben, habe ich nicht mitkopiert :)

noch andere ideen ? mittlerweile sieht der code (jetzt koplett kopiert)
aktuell so aus:
Angehängte Dateien:
Gast #223755
Lesenswert?

Hmmm

Ich erkenne in deinem Listing auf den ersten Blick nichts
ungewöhnliches.Es müßte funktionieren.

Leider hab ich momentan keinen T26 hier um das mal zu testen aber
normalerweise funktioniert das auch bei mir ohne Probleme.


Hier mal nen Einfaches Testprogramm wenn du willst.


===================================================



Dim A as Byte

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale =
64


Do
Gosub PWM
Loop

Pwm:
 For A = 1 to 255
  Pwm1a = A
  Waitms 15
 Next
Return

End

==================

Mit ner einfachen LED über 160 Ohm nach Masse sollte es dann gut
Sichtbar sein.


Oder häng dich mal an Port b3.
Der ist frei.
Die Configzeile wird dann entsprechend angepasst.
Gast #223758
Lesenswert?

also, mit angehängtem assembler code klappts. offenbar wurde bei der
übersetzung / umsetzung des compilers auf den tiny26 geschlampt: das
korrekte setzen der TCCR1A und TCCR1B ist mit der config timer1=pwm
blabla zeile NICHT möglich (siehe beiliegenden code...)

das sollte man mal jemandem sagen, der damit zu tun hat...

grüße
Angehängte Dateien:
Gast #223759
Lesenswert?

Mahlzeit zusammen.


@Skragan

Ich hab mir mal aus nem alten Datenlogger den gesockelten Tiny26
besorgt.

Als erstes mal dein Programm "LICHTREGELUNG HW PWM.RTF"

Da streikt mein Compiler bei den Zeilen 11 bis 20 da die
Portdefinitionen natürlich unsinn sind (Is mir auch nicht aufgefallen
weil man die normalerweise nebenbei macht).

Richtig ist also :

=====================
Config Pina.0 = Input
'Eingangsrelais

Config Pina.1 = Input                                       'Poti R17
Config Pina.2 = Input                                       'Poti R18
Config Pina.3 = Input                                       'Poti R19

Config Pina.4 = Output
Config Pina.5 = Output
Config Pina.6 = Output
Config Pina.7 = Output
=========================

Danach kann ich das Programm mühelos ohne Fehlernmeldung compilieren.
In den Tiny hab ich es noch nicht,muß´erst den Controller ins
Steckbrett befördern.




Jetzt fällt mir auch wieder ein das die Unterstützung beimn Tiny26
zwecks PWM nicht ganz komplett ist und das man etwas tricksen muß.

In meiner Codesammlung findet sich dann auch etwas.
Die Register müssen manuell gesetzt werden.

Probier mal das hier
==================================0

Dim A As Byte
TCCR1A=&B01010011
TCCR1B=&B10000111
Ddrb.1 = 1        'Port b.1 als Ausgang.


Do
Gosub PWM
Loop

Pwm:
 For A = 1 to 255
Ocr1c = 255
OCR1A=127
OCR1B=50
  Waitms 15
 Next
Return

End

=========================

Verifiziert hab ich es noch nicht.
kommt heut Abend wenn ich Zeit habe.




Und zur Anmerkung:
Ich arbeite noch mit der 7.4 von Bascom.
Ein Update auf die 7.8 ist eh fällig wegen M44,88 Support.



@Alex

Ja,dürfte soweit geklärt sein.
Gast #223760
Lesenswert?

jau, danke für´s nachschauen :)

dann liege ich ja nicht falsch mit der vermutung, das bascom das nicht
begreift. ich hab die register jetzt auch manuell gesetzt und siehe da:
kaum macht man´s richtig, funktioniert´s :))
Gast #223761
Lesenswert?

Yo,mir ist das auch erst so im nachhinein eingefallen das es bei einigen
Controllenr noch Fehler gibt.

Wie gesagt,ich muß mal unbedingt ein Update auf de 7.8 machen da könnte
es dann mit drinne sein.
Gast #223763
Lesenswert?

So,hab geduscht,Gegessen,Post und Mails erledigt und die Familie ist
auch abgefertigt.

Hab jetzt mal nen Tiny26 auf ein Steckbret geschnallt.
Oben im Listing hab ich noch einige Fehler.
Deswegen hier die aktuelle Version zum Testen im Anhang.

Ich hab mal alle 4 Ports einzeln als Ausgang geschaltet.

Funktioniert bei mir ohne Probleme und auch die ca. 2.55 Sekunden pro
durhclauf stimmen.

Später werd ich mal das besagte Update von Bascom auf die 7.8 machen um
zu sehen ob sich an diesem Umstand was geändert hat.
Angehängte Dateien:
Gast #223764
Lesenswert?

Ich habs nun endlich geschafft mal das Update zu machen.

Habs gleich mal Probiert.
In der 7.8er gehts mit PWM auf dem Tiny26 nun so wie es gedacht war.

Das angepasste Beispiel ist im Anhang.


Übrigens:

Eine gute Nachricht für die Nutzer der Freewareversion.
Der Maximale Code ist auf 4K gewachsen.
Angehängte Dateien:
Gast #223766
Lesenswert?

Heut Nacht hatte ich nur die Demo drauf. (Mal eben schnell auf nem
anderen Rechner inst.)

Vorhin hab ich das Update über den Wizard gemacht (6 Versuche.Server
ist wohl ausgelastet) und sehe das wir schon bei 7.9 sind.

Es hat sich da ne Menge getan.
Viel ist gefixt worden.

Probiers einfach zwischendurch mal.
Irgendwann klappts.

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