Bascom und PWM auf Attiny startet nicht

#1016032
Lesenswert?

Hallo zusammen,
im meinem Programm versuche ich seit Tagen den Timer0 8Bit als PWM auf 
PortA.7 (OC0B) ans laufen zu bekommen - leider ohne Erfolg.

Bedingt durch die Impuls/Drehzahlmessung an INT0 ist der PIN PortB.2 und 
der Timer1 bereits in Gebrauch. Funktioniert soweit auch tadellos.

Im Datenblatt, in der Beschreibung des Timer0 als PWM habe ich nun 
gelesen das man diesen, sofern man einen PIN als nicht PWM nutzt (wie 
den INT0) die Register TCCR0A und TCCR0B extra konfigurieren muß. Meine 
Interpretation des Datenblattes habe ich in die Register geschreiben

Da liegt das Problem - mit meinem veralterten Schulenglisch komm ich da 
nicht weiter. Ich habe schon für andere Test den INT0 mal komplett 
heraus kommentiert um so den PIN PB2 frei zumachen und beide als PWM 
zunutzen, auch Fehlanzeige.

Kann mir jemand helfen oder Tipps geben ??????

Gruß
Schorschi
#1016066
Lesenswert?

Dein Problem dürfte sein dass Bascom recht zickig sein kann, sobald er 
es mit moderneren Tinys zu tun bekommt.
Der Config Timer Befehl funktioniert z.B. mit den Tiny 45/85 nicht 
richtig. Mit deinem 44er wird es möglicherweise auch so sein.

Abhilfe:
Die Timerregister direkt beschreiben.

Hier ein Beispiel für die Konfiguration der PWM eines Tiny85:
1
Ddrb.1 = 1                                       'OC1A PWM Ausgang
2

3
'PLL als Takt für Timer1 einschalten
4
Set Pllcsr.plle
5
Waitus 100
6
While Pllcsr.plock = 0
7
Wend
8
Set Pllcsr.pcke
9

10
'Timer1 PLL Mode einschalten
11
Tccr1 = &B01100011
12
Ocr1c = 255
13

14
Ocr1a = 0                                         'PWM Dutycycle

Das kannst du natürlich nicht 1:1 übernehmen, aber vielleicht zeigt es 
dir die Richtung. Im mcselec Bascom Forum gibts auch noch Infos zur 
Programmierung der Tiny-Timer.
#1016133
Lesenswert?

Hallo Erwin,
zunächst danke für den Hinweis. Die Progammierung vom Tiny45 habe ich 
schon hinter mir. Da ging es nur mit - siehe hier
'-------------------------------------------------------------------
Config Timer0 = Pwm , Prescale = 8 , Compare A Pwm = Clear Down ,
Config Timer1 = Timer , Prescaler = 2
Tccr0b = &B00000010
Tccr1 = &B00000010                                          'Prescaler = 
2
'-------------------------------------------------------------------
auch wollte Bascom bei der Config von Timer1 ein "r" an dem Prescale- 
Einstellung

...... warum auch immer

Aber auch in diesem Fall ging es um "Timer0" mit PWM und mit der 
Einstellung ging es beim Tiny45. Wenn der Tiny45 auf PB1 einen ADC zur 
Verfügung hätte, hätte ich nicht so schnell auf den Tiny44 gewechselt. 
Bei dem Tiny45 kommt Timer0 mit PWM dem INT0 Interrupt nicht in die 
Quere, vieleicht ging es deshalb. ich hab keine Ahnung.

Gruß
Schorschi
Gast #1016690
Lesenswert?

Sprachen wie BASCOM bestätigen die PISA Studie unter den Programmierern.
Wozu muß ich einen ATTiny auch noch in Basic programmieren.
Der Blick ins Datenblatt ist ja eh vollkommen unnötig.

Arme Welt!
#1016806
Lesenswert?

Hallo Schorschi, du solltest wohl besser nicht nach Profis rufen, sonst 
kommen die Vollpfosten angelaufen.
Ist irgendwie wie in Politik und Bankwesen...

In einem hat der "Profi" aber schon ein bisschen recht:
Microcontroller programmieren ohne Datenblatt führt dich auf Dauer nicht 
wirklich weiter. Auch nicht mit Bascom!

Was die Tinys angeht, solltest du dringend den Rat von Paul Baumann 
beherzigen und die neuesten Include Dateien einbinden.

Die Bascom Befehle zur Timerprogrammierung solltest du besser vergessen,
das spart Ärger!
Hier mal ein auf die Schnelle ein UNGETESTETES Programm das die von dir 
gewünschte PWM erzeugen sollte:
1
'Konfiguration Timer 0 für Fast PWM
2
'NICHT GETESTET !!
3

4
$regfile = "ATtiny44.DAT"
5
$crystal = 8000000
6

7
$hwstack = 16
8
$swstack = 16
9
$framesize = 16
10

11
Dim Duty_cycle As Byte
12

13
Duty_cycle = 127                   '50% Tastverhältnis
14

15
Ddra.7 = 1                         'OC0B = Ausgang
16

17
Ocr0b = Duty_cycle                 '8Bit Tastverhältnis
18

19
Tccr0a.wgm00 = 1                   'Fast PWM Mode 3
20
Tccr0a.wgm01 = 1
21
Tccr0b.wgm02 = 0
22

23
Tccr0a.com0b0 = 0                  'Compare Output Mode (=non inverting)
24
Tccr0a.com0b1 = 1
25

26
Tccr0b.cs00 = 0                    'Clock select ClkIO / 256
27
Tccr0b.cs01 = 0                    'und Timer starten
28
Tccr0b.cs02 = 1
29

30
Do : Loop

Ich habe die Register bewusst Bit für Bit konfiguriert, dann ist es 
vielleicht verständlicher. Im richtigen Programm kannst du die einzelnen 
Bytes natürlich auf einmal schreiben.

Grüße
erwin
Gast #1016845
Lesenswert?

An die ganzen Bascom-Hasser in diesem Thread:
Geht sterben und werden mit eurem Asm und C glücklich.
Echt tolle sache der Thread-Opener hat nach hilfe gefragt und nicht 
danach daß man ihn runterputzt.
Echte Hilfe sehe ich hier nur von wenigen aber ansonsten viel Blabla...

Alexey, den dieser Glaubenkrieg langsam Ankotzt...
Gast #1016924
Lesenswert?

Hallo zusammen und Danke,
also ich habe die Bascom Version 1.11.9.1 das ist das aktuellste was ich 
bei MCS gefunden habe. Im Umgang mit den Datenblättern ist sicher mein 
20 Jahre altes Englisch ein Problem. Als Umsteiger von Basic (C-Control) 
war Bascom für mich das naheliegsde.
Bevor ich meine Frage gestellt habe, habe ich bereits eine Woche 
getestet und kam nicht weiter.
Vielleicht war meine Frage zu optimistisch gestellt. Ich dachte nur das 
ein "Profi", sofern er die Zeit hat über den Quelltext zu schauen, mir 
mit einigen Tipps auf die schnelle aushelfen kann und sich selbst 
zuschade ist für Gepöbel.

Mit meinem Wissen, auch ohne Studium, macht es mir auch mehr Spaß selbst 
die Dinge zuregeln. Ich frage erst wenn ich am Ende meines Weges bin.
Beim Attiny45 bin ich klar gekommen und bei dem Attiny44 stecke ich halt 
fest.

Danke an die Helfenden, ich schaumal ob ich jetzt weiter komme

Gruß
Schorschi



PS: und der Rest - es ist noch kein Meister vom Himmel gefallen, das 
solltet ihr euch merken
#1017923
Lesenswert?

Hallo Paul, Hallo Erwin,
so nun ist alles gut, mit den neuen DAT Dateien ist der vom Compiler 
gemeldete Fehler WDTCR (Watchdog) behoben und mit den Definitionen vom 
Erwin gehts auch.

Ja spitze

eine letzte Frage, wo gibt es die DAT Dateien ------ bei MCS ?????
Meine Dateien waren so bei der Download Version drin.

Gruß
Schorsch
Gast #1018245
Lesenswert?

Die Dateien, die ich Dir geschickt hatte, habe ich selbst mittels Editor 
korrigiert. Dazu habe ich im Datenblatt sämtliche Registernamen mit 
denen
verglichen, die sich in den Include Dateien befanden und stieß dabei auf
ein paar Buchstabendreher und falsche Adressangaben.
Scheinbar haben die Schelme das immer noch nicht korrigiert... :-((

MfG Paul
#1019183
Lesenswert?

Hallo Paul,
in deiner Datei zum ATTíny44 scheint aber etwas nicht zu stimmen.
Wenn ich einen ADC einbinde kommt folgende Fehlermeldung:

Error : 0     Line :   67     [ADC_MUX entry not found in DAT file]  , 
in File : D:\ATTINY44-TEST-INT0-1.BAS

Die originale Datei zeigt den Fehler: compiliert aber....
Error : 202   Line :   1     .EQU not found, probably using functions 
that are not supported by the selected chip [WDTCR]  , in File : 
D:\ATTINY44-TEST-INT0-1.BAS
Error : 202   Line :   1     .EQU not found, probably using functions 
that are not supported by the selected chip [WDTCR]  , in File : 
D:\ATTINY44-TEST-INT0-1.BAS

Wenn ich am Wochenende Zeit habe schau ich mal mit Datenblatt und 
vergleiche beide. Da du als Gast schreibst kann ich dir kein Mail 
schicken.

Gruß
Schorsch
#1019211
Lesenswert?

Die ATtiny44.Dat von Paul hat imho noch einige bugs:
Ganz deutlich die Zeile HWMUL=1
Der Tiny44 hat (wie alle Tinys?) keinen Hardware Multiplizierer, hier 
muss als HWMUL=0 stehen.

Auch betreffend des Watchdogs und des ADC scheint einiges nicht zu 
stimmen.

Deshalb habe ich mal, um das Chaos komplett zu machen,  meine 
ATtiny44.dat angehängt. Die sollte eigentlich korrekt sein.

Grüße
erwin
Angehängte Dateien:

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