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
Hi, auf jeden Fall wird die Print-Anweisung nur EINMAL ausgeführt, weil danach ein CLOSE kommt. Andy
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.
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
Das sind keine Sprüche, das sind Tatsachen. Schau Dir doch das Datenblatt vom Tiny an, wo die/der Timer beschrieben ist. Wenn es dann noch nicht klar ist, nochmal fragen. Gruß
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!
Guck mal hierhin: http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=37291 Hast Du die neueste Version von Bascom? Wenn nicht, lade sie Dir mal von MCS. Grund: Die Include-Dateien von Tiny24/44/84 waren vorher noch nicht fehlerfrei und auch ich hatte eine Menge "Freude" mit darin falschen Registernamen. MfG Paul
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
Hallo Georg, ich würde Fragen zu BASCOM immer in diesem Forum posten: http://www.bascom-forum.de Hier sind die Leute immer hilfsbereit und man wird nicht gleich niedergemacht, wenn man nicht in ASM oder C programmiert. Gruß Frank
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...
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
Hallo, noch die Frage an die Aktualität der "ATtiny44.DAT" Datei. Welches Datum hat die Aktuelle ?????
Hier habe ich Dir mal die beiden Dateien vom Tiny24 und 44 zusammengepackt. Die stammen vom 24.6.08 MfG Paul
Hallo Paul, nachdem ich jetzt hier zuhause in das Verzeichnis gesehen haben - die Dateien in der Version 11.1.9.1. sind vom 10.01.2008 Danke Gruß Schorsch
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
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
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.