• .
  • Willkommen im Forum!
  • Alles beim Alten...
  • Du hast kaum etwas verpasst ;-)
  • Jetzt noch sicherer mit HTTPS
Hallo, Gast! Anmelden Registrieren


Tiny Tone
#21
Also - alles wie schon gehabt, mit dem bisherigen LRC-Filter für max 1kHz.
Screenshots vom DS1054, der TinyTone wird versorgt aus einer 3,6V Li-Batterie.

   
   
...mit der Lizenz zum Löten!
 
Reply
#22
tja...man lese zuerst etwas im db... Rolleyes 

>The Timer/Counter0 can be clocked by an internal or an external clock source.

>Timer/Counter1 and the prescaler allow running the CPU from any clock source
while the pres-caler is operating on the fast 64 MHz  PCK clock

nur Timer1 ist für schnelle PWM geeignet.
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#23
Mit OSCCAL kannst du noch bis 30Mhz übertakten.

PWM geht auch mit Timer1, in HW aber eventuell auf nem anderen Ausgangspin.

Zitat:The Timer/Counter1 features a high resolution and a high accuracy usage with the lower prescaling opportunities. It can also support two accurate, high speed, 8-bit Pulse Width Modulators using clock speeds up to 64 MHz (or 32 MHz in Low Speed Mode). In this mode, Timer/Counter1 and the output compare registers serve as dual stand-alone PWMs with non-overlapping non-inverted and inverted outputs. Refer to page 86 for a detailed description on this function. Similarly, the high prescaling opportunities make this unit useful for lower speed functions or exact timing functions with infrequent actions

Pins tauschen bei Dip-8 ist ja im Rahmen des Möglichen.
 
Reply
#24
(19.01.2019, 01:12 AM)alfsch schrieb: tja...man lese zuerst etwas im db... Rolleyes 

>The Timer/Counter0 can be clocked by an internal or an external clock source.

>Timer/Counter1 and the prescaler allow running the CPU from any clock source
while the pres-caler is operating on the fast 64 MHz  PCK clock

nur Timer1 ist für schnelle PWM geeignet.

Timer 1 kann kein PWM - das ist der Haken

Will jemand so ein PCB haben?
...mit der Lizenz zum Löten!
 
Reply
#25
(19.01.2019, 09:34 AM)voltwide schrieb:
(19.01.2019, 01:12 AM)alfsch schrieb: tja...man lese zuerst etwas im db... Rolleyes 

>The Timer/Counter0 can be clocked by an internal or an external clock source.

>Timer/Counter1 and the prescaler allow running the CPU from any clock source
while the pres-caler is operating on the fast 64 MHz  PCK clock

nur Timer1 ist für schnelle PWM geeignet.

Timer 1 kann kein PWM - das ist der Haken

ach komm Rolleyes
-->

   

...immerhin 250kHz /8bit PWM - oder ? misstrau
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#26
In den Überschriften steht beim Timer0 "mit PWM", beim Timer1 nichts von PWM.
Dieses DB fand ich schon immer extrem "verstreut".
Werd mal sehen, ob ich das mit timer1 ans Laufen bekomme.
Vmtl nur mit der einfachen PWM (256Takte), nicht die phasenkorrekte (510Takte).
Schaumermal....
...mit der Lizenz zum Löten!
 
Reply
#27
ja, die DB der diversen Firmen sind alle mehr oder weniger wie "Suchbilder" ; Tongue

ich würde bei T1 erstmal anders versuchen: kein PWM-mode, sondern nur OC1x compare output und den timer einfach durch-laufen lassen;
er macht dann ja 255 ticks, also eben 250kHz Takt ; es sollten dann sogar 3 outputs möglich sein, ABC.
(irgendwie hab ich nur nicht gefunden, ob die Ocx , also outputs, bei timer Ablauf resettet werden....)
wenns also nicht geht, muss eben PWM mode bit auch angeschaltet werden und OC1C auf 255gesetzt werden, der ist dann der timer reload .
output kann dann OC1A und B sein.
nett dabei: du hast den output auf pin6 benutzt, der kann zugleich auch OC1A . somit geht das mit dem aktuellen board. Smile
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#28
wobei...etwas gegrübelt...reizvoller wäre dann sowas:
- OC1A : macht PWM , 7bit , also OC1C auf 127 gesetzt;
- PLL im low-power-mode , macht dann 32MHz , somit der timer wieder 250kHz pwm .
- OC1B : bekommt auch 7bit Wert...und zwar so:

es wird ne Tabelle erzeugt, wenn genug Speicher in deinem mini-tiny hast, mit 512 x 16bit Werten (1kB, köönte gehen, sonst eben 256 Werte Rolleyes  );
die 16bits sind je 1Byte MSB mit 7bits maximum, und 1 LSB mit den restlichen 7 bits; (jeweils left-just.);
vom oc1a out kommt statt der Monster-Drossel ein R , zb 4k7 , zum VOL-poti; vom oc1b (4k7 x 128 = ) 602k auch , das ist das "LSB" ;
somit wirds eine 14-bit / 250kHz Auflösung, die theoretisch > 80dB S/N und 0,01% Klirr erreicht (dominanter Fehler sind da das matching des 1/128 R-verhältnisses und die Nichtlinearität der Portpins) und 0...20kHz problemlos macht.

in diesem etwas komplexeren Gewerkel muss allerdings etwas umverdrahtet werden: oc1b kommt auf PB4 raus, also müssen R22+28 raus, frequ.poti A/D in kommt auf PB3 ; somit pb4 frei, bekommt den 600k zum Vol-poti. + der 100n -> 2n2 , wir machen jetzt ja 20kHz. max.

software - das timer-update lädt dann eben zwei aufeinanderfolgende Bytes, in oc1a und oc1b ; minimaler Mehraufwand.

cool wa ? Cool

ps pb3 sollte wohl die betriebsspannung messen..oder wie? geht auch so: du misst die interne Referenz , 1.1V : was da gemessen wird.../Milchmädchenrechnung/...ergibt die VCC . Smile
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#29
(19.01.2019, 01:24 PM)alfsch schrieb: wobei...etwas gegrübelt...reizvoller wäre dann sowas:
- OC1A : macht PWM , 7bit , also OC1C auf 127 gesetzt;
- PLL im low-power-mode , macht dann 32MHz , somit der timer wieder 250kHz pwm .
- OC1B : bekommt auch 7bit Wert...und zwar so:

es wird ne Tabelle erzeugt, wenn genug Speicher in deinem mini-tiny hast, mit 512 x 16bit Werten (1kB, köönte gehen, sonst eben 256 Werte Rolleyes  );
die 16bits sind je 1Byte MSB mit 7bits maximum, und 1 LSB mit den restlichen 7 bits; (jeweils left-just.);
vom oc1a out kommt statt der Monster-Drossel ein R , zb 4k7 , zum VOL-poti; vom oc1b (4k7 x 128 = ) 602k auch , das ist das "LSB" ;
somit wirds eine 14-bit / 250kHz Auflösung, die theoretisch > 80dB S/N und 0,01% Klirr erreicht (dominanter Fehler sind da das matching des 1/128 R-verhältnisses und die Nichtlinearität der Portpins) und 0...20kHz problemlos macht.

in diesem etwas komplexeren Gewerkel muss allerdings etwas umverdrahtet werden: oc1b kommt auf PB4 raus, also müssen R22+28 raus, frequ.poti A/D in kommt auf PB3 ; somit pb4 frei, bekommt den 600k zum Vol-poti. + der 100n -> 2n2 , wir machen jetzt ja 20kHz. max.

software - das timer-update lädt dann eben zwei aufeinanderfolgende Bytes, in oc1a und oc1b ; minimaler Mehraufwand.

cool wa ? Cool

ps pb3 sollte wohl die betriebsspannung messen..oder wie? geht auch so: du misst die interne Referenz , 1.1V : was da gemessen wird.../Milchmädchenrechnung/...ergibt die VCC . Smile

Habs schon zu etwa 63% verstanden, klingt nicht übel.
Damit hast Du den ersten Preis gewonnen:
1 original TinyTone-PCB!
...mit der Lizenz zum Löten!
 
Reply
#30
Big Grin

;prost
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply
#31
Die aktuellen PCB-layouts weichen ein wenig ab von den ursprünglich vorgestellten, in letzter Minute habe ich noch einen DIP-switch eingebaut.


.pdf   TinyTone2019_01_14_vals.pdf (Größe: 19,51 KB / Downloads: 358)

.pdf   TinyTone2019_01_14_sch.pdf (Größe: 34,08 KB / Downloads: 366)

   


Angehängte Dateien Thumbnail(s)
   
...mit der Lizenz zum Löten!
 
Reply
#32
Hat sich an der Funktion etwas geändert?
 
Reply
#33
Bislang nicht, der 2-Kanal-DIP switch schaltet SPI-Versorgung und den Watchdogtimer hinzu.
Inzwischen habe ich angefangen das Programm umzubauen auf Timer1, komme allerdings bislang nicht über 125kHz PWM-rate hinaus.
...mit der Lizenz zum Löten!
 
Reply
#34
Nach diversen Tests bestätigt sich obige Feststellung: Über 125kHz PWM-Takt komme ich nicht hinaus.
Hierbei habe ich schon alle anderen Programmteile rausgeworfen - ohne Erfolg.
Mit PCK/4 ergeben sich 63kHz PWM Takt = Timer-Interruptzyklus.
Mit PCK/2 ergibt sich 125kHz PWM Takt und 96kHz Timer-Interruptsyklus.
D.h. so richtig funktionert das erst ab PCK/4.
Angehängt zwei Oszillogramme. Der Interrupt übergibt permanent konstantes 50% PWM and den Timer.
Kanal1 ist aktiv 1 während des Timer-Interrupts, Kanal2 der PWM-Ausgang.

   
   
...mit der Lizenz zum Löten!
 
Reply
#35
Das riecht nach einem Wettbewerb...  lachend .
 
Reply
#36
Was macht Kanal2 auf dem 2 Plot, hängt er da 2x?
 
Reply
#37
(24.01.2019, 04:18 PM)christianw. schrieb: Was macht Kanal2 auf dem 2 Plot, hängt er da 2x?

Ich glaube, ich habs gefunden. Bei PCLK/16 zeigt sich folgendes Bild (ch1=T1Irq, ch2=PWM)
   
Ansteigende blaue Flanke: Ende PW M-Zyklus, d.h. Timer Ovl
triggert den Irq
Der zeigt sich ca 3,5us später (steigende Flanke gelb)
In der Zwischenzeit sind wohl irq-typische Registerrettungen passiert.
Die fallende Flanke des Irq erfolgt ca 7us nach dem Zählerüberlauf -
und damit ist die Irq-Rate begrenzt auf ca 100..130kHz.
Das ist das momentane Nadelöhr - könnte man meinen.
Andererseits hatte ich das globale Irq-Enable mal ganz abgeschaltet -
und bin trotzdem nicht über 125kHz PWM gekommen.
Es könnte weiterhelfen mal den CPU-Clock per fuse bit auf die PLL zu legen.
...mit der Lizenz zum Löten!
 
Reply
#38
Lol, natürlich hilft die PLL da weiter... Big Grin
 
Reply
#39
(24.01.2019, 04:36 PM)voltwide schrieb:
(24.01.2019, 04:18 PM)christianw. schrieb: Was macht Kanal2 auf dem 2 Plot, hängt er da 2x?

Ich glaube, ich habs gefunden. Bei PCLK/16 zeigt sich folgendes Bild (ch1=T1Irq, ch2=PWM)

Ansteigende blaue Flanke: Ende PW M-Zyklus, d.h. Timer Ovl
triggert den Irq
Der zeigt sich ca 3,5us später (steigende Flanke gelb)
In der Zwischenzeit sind wohl irq-typische Registerrettungen passiert.
Die fallende Flanke des Irq erfolgt ca 7us nach dem Zählerüberlauf -
und damit ist die Irq-Rate begrenzt auf ca 100..130kHz.
Das ist das momentane Nadelöhr - könnte man meinen.
Andererseits hatte ich das globale Irq-Enable mal ganz abgeschaltet -
und bin trotzdem nicht über 125kHz PWM gekommen.
Es könnte weiterhelfen mal den CPU-Clock per fuse bit auf die PLL zu legen.

Um auf Deine Frage zurückzukommen: Der Irq wird nicht fertig innerhalb eines PWM-Zyklus -> Stack Overflow!!!

(24.01.2019, 04:40 PM)christianw. schrieb: Lol, natürlich hilft die PLL da weiter... Big Grin
Macht Sinn hinsichtlich Irq-Verstopfung - aber ohne Irq geht es auch nicht weiter hinterhältig
...mit der Lizenz zum Löten!
 
Reply
#40
>>Es könnte weiterhelfen mal den CPU-Clock per fuse bit auf die PLL zu legen.

Rolleyes

davon bin ich selbstredend ausgegangen.

bei 250kHz haste 4 us, im irq-service. damit er also nicht nur noch irq macht, muss er in 3us oder so, fertig sein.
das geht nur: wenn cpu core so hoch wie möglich taktet, also pll-> /4  -> 16 MHz .
+ optimal wenig Befehle dort sind
+ die register nicht alle automatisch vom compiler auf den stack geschoben werden , sondern selbst "verwaltet"; 
in Bascom ist das irgenwas mit " # nosave "
Wink
    Don't worry about getting older.  You're still gonna do dump stuff...only slower
 
Reply