Forum: Mikrocontroller und Digitale Elektronik Atiny85 DAC Out


von Kahn P. (Gast)


Lesenswert?

Hallo,

ich verstehe die Initialisierung für das PWM noch nicht.
Ich initialisiere erfolgreich den Analogausgang an PB1:

[cpp]
  TCCR0A = 3<<COM0B0 | 3<<WGM00;  //only PWM on PB1(Led)
  TCCR0B = 0<<WGM02 | 1<<CS00;
  TCCR1  = 0<<PWM1A | 0<<COM1A0 | 1<<CS10;
  GTCCR  = 1<<PWM1B ;

  OCR0B=0xff;
  OCR0A=0xff;
[/cpp]

Ich kann nun via OCR0B=val;  Spannungen auf PB1 ausgeben.

Dies muss aber auf PB0 erfolgen, also verwende ich

OCR0A=val;

Aber das funktioniert nicht.


Wie kann ich das PWM dazu bewegen, nur auf PB0 auszugeben ?

Echt vielen Dank für Hinweise
 Grüße
   Karsten

von H.Joachim S. (crazyhorse)


Lesenswert?

Karsten S. schrieb:
> TCCR0A = 3<<COM0B0 | 3<<WGM00;  //only PWM on PB1(Led)
>   TCCR0B = 0<<WGM02 | 1<<CS00;
>   TCCR1  = 0<<PWM1A | 0<<COM1A0 | 1<<CS10;
>   GTCCR  = 1<<PWM1B ;
>
>   OCR0B=0xff;
>   OCR0A=0xff;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Phase correct PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
// Timer Period: 0,51 ms
// Output Pulse(s):
// OC0A Period: 0,51 ms Width: 0 us
TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | 
(0<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

von Karl M. (Gast)


Lesenswert?

Vielleicht zur Begrifflichkeit eine Klarstellung:

einen "Analogausgang an PB1" hat eine attiny85 nicht!

von Kahn P. (Gast)


Lesenswert?

Hallo Joachim,

ich habe meine Initialisierung durch die deine ersetzt, nun erlange
ich auch an PB1 kein Signal mehr, und PB0 bleibt auf null.

Hallo Gast, doch. Mit meiner Initisalisierung (oben) wird PB1 analog 
beschrieben.

von H.Joachim S. (crazyhorse)


Lesenswert?

PB1 ist ja auch nicht drin (OCR0B).
Musst halt einen Wert nach OCR0A schreiben. Ausserdem muss natürlich 
DDRB.0 gesetzt sein.

von Kahn P. (Gast)


Lesenswert?

Hallo Joachim,

Mittels :
[cpp]
  TCCR0A = 3<<COM0A0 | 3<<COM0B0 | 3<<WGM00;
  TCCR0B = 0<<WGM02 | 3<<CS00;
  GTCCR = 1<<PWM1B | 0<<COM0B0;
  TCCR1 = 3<<COM1A0 | 7<<CS10;
[/cpp]

OCR0B = MeinWert;

Beschreibe ich erfolgreich PB1

Du schlägst vor für PB0
[cpp]
TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | 
(0<<WGM01) | (1<<WGM00);
 TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);
 TCNT0=0x00;
 DDRB = 0;
[/cpp]

OCR0A=MeinWert;

Dabei kommt raus, das PB1 voll ausgeregelt ist, und PB0
nicht angesprochen wird. Als GPIO funktioniert sogar PB0

Habe ich etwas vergessen ?

Danke für deine Unterstützung!
 Gruß aus Berlin
   Karsten

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Das hier funktioniert:
1
/* init timer to fast PWM Mode
2
 * we run with full speed @ 1Mc resulting in a PWM frequency of roughly 4 kHz
3
 * keep in mind to initialize PB0 and PB1 for output */
4
void TimersInit(void) {
5
// initialize normal pair output
6
  TCCR0A = (1 << COM0A1) | (0 << COM0A0) | (1 << COM0B1) | (0 << COM0B0) | (1 << WGM01)| (1 << WGM00);
7
  TCNT0 = 0;
8
  TCCR0B = (0 << CS01) | (1 << CS00);
9
// makes sure outputs are off 
10
  OCR0A = 0;
11
  OCR0B = 0;
12
}

: Bearbeitet durch User
von Kahn P. (Gast)


Lesenswert?

Hallo Matthias,

mit deinem Example wird PB1 analog betätigt über:

OCR0B=val

aber

OCR0A=val

Verändert nicht den Wert von PB0.

PB0 stand wie PB1 bei der Initialisierung auf Ausgang(DDRB|=(1 <<PB0))
und kann im weiteren als GPIO nach der Initialisierung
als PWM betätigt werden(PORTB|=(1<<PB0)).

Das ist für PB1 nicht nach der Initialisierung als PWM nicht möglich.

PB2 verwende ich bereits als AnalogInput:
1
 //10 bit
2
  ADMUX =
3
          (0 << ADLAR) |     // do not left shift result (for 10-bit values)
4
            (0 << REFS2) |     // Sets ref. voltage to internal 1.1V, bit 2
5
            (1 << REFS1) |     // Sets ref. voltage to internal 1.1V, bit 1   
6
            (0 << REFS0) |     // Sets ref. voltage to internal 1.1V, bit 0
7
            (0 << MUX3)  |     // use ADC1 for input (PB2), MUX bit 3
8
            (0 << MUX2)  |     // use ADC1 for input (PB2), MUX bit 2
9
            (0 << MUX1)  |     // use ADC1 for input (PB2), MUX bit 1
10
            (1 << MUX0);       // use ADC1 for input (PB2), MUX bit 0
11
12
  ADCSRA = 
13
            (1 << ADEN)  |     // Enable ADC 
14
            (1 << ADPS2) |     // set prescaler to 128, bit 2 
15
            (1 << ADPS1) |     // set prescaler to 128, bit 1 
16
            (1 << ADPS0);      // set prescaler to 128, bit 0

Danke für Hinweise..  Irgendwas ist faul :)

von Ralf G. (ralg)


Lesenswert?

Karsten S. schrieb:
> Aber das funktioniert nicht.

Möglicherweise liegt's ja daran, dass du alle Timer mit PWM auf die 
(alle) Ausgänge schaltest.

von Walter S. (avatar)


Lesenswert?

Karsten S. schrieb:
> Hallo Gast, doch. Mit meiner Initisalisierung (oben) wird PB1 analog
> beschrieben.

nein, dadurch wird an PB1 ein Rehtecksignal ausgegeben

von Kahn P. (Gast)


Lesenswert?

Hallo Walter , hallo Ralf,

Wie auch die Waveform geartet ist, ich kann 0-5V Durchregeln auf PB1.

Jedoch nie auf PB0.

Die MUX Geschichten habe ich still gelegt, daran lag es nicht.

PB0 ist alternativ als GPIO einwandfrei verwendbar.

Gruß
 Karsten

von Ralf G. (ralg)


Lesenswert?

Karsten S. schrieb:
> Wie auch die Waveform geartet ist, ich kann 0-5V Durchregeln auf PB1.
Woher weißt du das? (Multimeter zählt nicht, das ist die falsche 
Antwort!)
> Die MUX Geschichten habe ich still gelegt, daran lag es nicht.
Dass die ADC-Eingänge darauf keinen Einfluss haben, ist schon klar.

von Kahn P. (Gast)


Lesenswert?

Lösung:
1
  //PB1
2
  TCCR0A = 3<<COM0B0 | 3<<WGM00; 
3
  TCCR0B = 0<<WGM02 | 1<<CS00; 
4
  //OCR0B=MeineVal(0-255)
5
6
  //PB0
7
  TCCR0A = 3<< COM0A0 | 3<<WGM00; 
8
  TCCR0B = 0<<WGM02 | 1<<CS00; 
9
  //OCR0A=MeineVal(0-255)

Das scheint wie der Kollege schon sagt keine PWM Signal
im klassischen sinne zu sein, lediglich haut der Timer
flanken auf den Port die Gewindigkeit macht die Amplitude aus.
Ergebniss ist 0-255 entspricht ~0-5V am P0 oder alternav am PB1

Erstmal vielen Dank für all die Hinweise
 das hat weitergeholfen
  Gruß Karsten

von Ingo L. (corrtexx)


Lesenswert?

Karsten S. schrieb:
> Das scheint wie der Kollege schon sagt keine PWM Signal
> im klassischen sinne zu sein, lediglich haut der Timer
> flanken auf den Port die Gewindigkeit macht die Amplitude aus.
Unsinn... Kann er laut Datenblatt garnicht. Der hat n ganz normalen 
PWM-Baustein drinnen.

von Kahn P. (Gast)


Lesenswert?

Okay

es geht auch mit beiden gleichzeitig:
1
 //PB1 & PB0
2
  TCCR0A = 3<<COM0A0 |3<<COM0B0 | 3<<WGM00; 
3
  TCCR0B = 0<<WGM02 | 1<<CS00; 
4
5
//für PB1 OCR0B = 0-255;
6
//für PB0 OCR0A = 0-255;

Danke nochmal.
 K.

von Draco (Gast)


Lesenswert?

Der Tiny85, sowie jeder Tiny oder Mega, haben KEIN DAC sie können KEIN 
Analogsignal ausgeben! Weder an PB0, PB1 noch an sonst einem Pin!

von Kahn P. (Gast)


Lesenswert?

Ist ein schönes Signal was ich genau so wie ein Analoges Röhren Signal
anwenden kann, selbst mein Multimeter misst die genaue Spannung die ich 
anlege, es ist mit hoher Frequenz, ein wie auch immer geflanktes Signal 
am oszi. Wo ist das Problem Gast ? Alles funktioniert hier.

von Ingo L. (corrtexx)


Lesenswert?

Karsten S. schrieb:
> es ist mit hoher Frequenz, ein wie auch immer geflanktes Signal
> am oszi.
Dann lass uns nicht dumm sterben und zeige uns mal das Oszillogramm. Das 
würde mich jetzt wirklich brennend interessieren.

von Peter II (Gast)


Lesenswert?

Karsten S. schrieb:
> Wo ist das Problem Gast

das es nicht Analog ist. Es ist kein DAC. Hänge eine Lautsprecher dran, 
dann hörst du den Unterschied.

von Kahn P. (Gast)


Lesenswert?

Also ich bin kein Elektroniker, nur ein Softwareentwickler
und bezüglich welche Register es zu setzen galt damit ich
mit dem Multimeter was sehe, wurde total erfüllt.

Was ist nun an dem Signal schlecht ? Das es flankiert ist, und
nur die Mitte gemessen wird am Multim. ?

Das es Lücken bei hoher Abtastfrequez aufbeißt ? oder was ist damit ?

von Peter II (Gast)


Lesenswert?

Karsten S. schrieb:
> Was ist nun an dem Signal schlecht ?

es ist nicht schlecht, es ist anders.

Es gibt Anwendungen die brauche eine Gleichspannung und andere kommen 
auch mit so einem PWM Signal klar.

von Draco (Gast)


Lesenswert?

Karsten S. schrieb:
> Was ist nun an dem Signal schlecht ? Das es flankiert ist, und
> nur die Mitte gemessen wird am Multim. ?

Richtig... DAS ist schlecht! Ein Multimeter hat eine extrem hohe Latenz 
und mittelt die Werte über einen gewissen Zeitraum.

Du hast an deinem Pin entweder 0 oder aber 5 Volt - nichts dazwischen. 
Gedenke an den Fall... wo du gerade von Röhren sprichst... regel mal 
eine Röhre, weil du denkst du hast da 2,7V am Ausgang, mit diesem Pin 
an. Du gibst da keine 2,7V drauf sondern Frequentierst sie mit mehreren 
Kiloherz immer mit 0 und 5 Volt. Was denkst du denn wie lange diese 
Röhre das mitmacht?!

Und das kannst du auf alles anwenden was ein analoges Signal bedarf. Es 
wird halt aus und wieder eingeschaltet und bekommt keine Gleichspannung 
geliefert. Hast dann am anderen Ende einen µC und du denkst da kommen 
dann 3V3 an, und du pumpst da 5V drauf - so ist der im Eimer. Bzw, 
sollte er das überleben ist das Signal sowieso fürn Eimer, weil er ja 
ständig springt zwischen 0 und 5V.

Du als Programmierer müsstest aber den Unterschied kennen zwischen 0 und 
1. Und mehr ist das nicht! (Gut, es gibt noch float... das wäre dann 0.5 
:-D aber das steht wieder auf nem ganz anderen Blatt :-D )

von Kahn P. (Gast)


Lesenswert?

Aber ich habe es nun nicht falsch programmiert, PulsWeitenModulation
nennt man das ja, und wer's denn braucht, kann sich ja noch einen
Kondensator dazu legen.

Wenn ich nun das eigene PWM Signal auf meinen Atiny85 -ADC lege,
kann ich damit wunderbar wieder die eingestellten Spannungen
erreichen/messen. Es ist allerdings richtig, das ich 100 Werte sammle
und die Mitte davon als ANL Input gewinne.

Der Wert ist ganz gut, natürlich "steht" der nicht wie eine eins.

Aber es reicht um z.b. einer WAGO / BECKHOF Klemme mitzuteilen, das ich
1V oder 2V oder 5V anlege.  Richtig ?

Oder siehst Du das anders ? Denn genau dafür will ich das getriggerte 
Signal verwenden.

Danke für Hinwiese
 Gruß Karsten

von Karl M. (Gast)


Lesenswert?

Bei dieser Unwissenheit, stehen mir die Haare zu Berge.

Man kann mit einem PWM-Signal, ohne weitere analoge Filterung und 
Verstärkung, keine Gleichspannung abnehmen.

Liebe Moderatoren, muss man solch einen Humbug dulden ?

Karsten S. schrieb:
> Aber ich habe es nun nicht falsch programmiert,
> PulsWeitenModulation
> nennt man das ja, und wer's denn braucht, kann sich ja noch einen
> Kondensator dazu legen.
>
> Wenn ich nun das eigene PWM Signal auf meinen Atiny85 -ADC lege,
> kann ich damit wunderbar wieder die eingestellten Spannungen
> erreichen/messen. Es ist allerdings richtig, das ich 100 Werte sammle
> und die Mitte davon als ANL Input gewinne.
>
> Der Wert ist ganz gut, natürlich "steht" der nicht wie eine eins.
>
> Aber es reicht um z.b. einer WAGO / BECKHOF Klemme mitzuteilen, das ich
> 1V oder 2V oder 5V anlege.  Richtig ?
>
> Oder siehst Du das anders ? Denn genau dafür will ich das getriggerte
> Signal verwenden.
>
> Danke für Hinwiese
>  Gruß Karsten

von Kahn P. (Gast)


Lesenswert?

Wie bitte ?

..  schade eigentlich.

Viel Produktives hast Du ja nicht geschrieben außer
das alles falsch ist.

Erklär doch mal deine Erbostheit.

von Draco (Gast)


Lesenswert?

Karsten S. schrieb:
> Aber es reicht um z.b. einer WAGO / BECKHOF Klemme mitzuteilen, das ich
> 1V oder 2V oder 5V anlege.  Richtig ?

Eben nicht!

Du kannst deiner Wago / Beckhof Klemme mitteilen ob du 0 oder 5 Volt 
angelegt hast. Und das halt aber mit 10khz (z.b.).

Man kann natürlich einen Low-Pass-Filter bauen... Dann bitte, 
biiiiittte... lies das und verstehe das auch:

http://www.allegromicro.com/en/Design-Center/Technical-Documents/Hall-Effect-Sensor-IC-Publications/Method-for-Converting-a-PWM-Output-to-an-Analog-Output-When-Using-Hall-Effect-Sensor-ICs.aspx

von Draco (Gast)


Lesenswert?

Hier auch nochmals eine Erklärung für einen Tiefpassfilter.

https://de.wikipedia.org/wiki/Tiefpass

Du solltest, je nach Qualität deines PWM Signals, mehrere Tiefpassfilter 
hintereinander schalten. Solltest du die genaue 0-5V brauchen, benötigst 
du aber einen aktiven Tiefpassfilter. Oder du machst das dann "clever" 
in der Software. Also für 0... dann wirklich deine PWM ausschalten und 
GND ziehen oder für 1 dein PWM ausschalten und auf VCC ziehen.

von Kahn P. (Gast)


Lesenswert?

Geht alles,

eben ausprobiert WAGO Busklemme ANL misst zumindest auf ~0.5V
genau was ich ausgebe, bin dann glücklicherweise mit 8[Khz] noch im 
Zeitschlitz.

Also ich weiß das dies ein hacke -Signal ist. Es ist gut genug für die 
Anwendungen, einen MP3 Player wollte ich damit nicht herstellen :)

Das PWM so verhasst ist wusste ich gar nicht :)

Viele AFU's hassen auch SDR(SoftwareDefinedRadio) ^^.

Danke für die Rege Beteiligung
  Grüße aus Berlin
    Karsten

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Mein lieber Herr Gesangsverein, hier geht ja was ab... So viel Ignoranz 
habe ich lange nicht gesehen...

von Guest (Gast)


Lesenswert?

Karsten S. schrieb:
> Das PWM so verhasst ist wusste ich gar nicht :)

PWM ist nicht verhasst, aber ein PWM-Signal als analoge Spannung zu 
bezeichnen ist einfach falsch, auch wenn Du mit mehr oder weniger 
Aufwand eine daraus machen kannst.
Und nur weil es bei Deiner Anwendung grad mal so funktioniert wie Du es 
möchtest ist das trotzdem nicht richtig oder immer so.

von Draco (Gast)


Lesenswert?

Karsten S. schrieb:
> eben ausprobiert WAGO Busklemme ANL misst zumindest auf ~0.5V
> genau was ich ausgebe, bin dann glücklicherweise mit 8[Khz] noch im
> Zeitschlitz.

Jetzt mal ehrlich, welchen Wago nutzt du denn? Ich kann mir beim besten 
Willen nicht vorstellen das dies funktionieren soll:

PWM -> Wago Klemme

8Khz ist ja auch noch relativ langsam was PWM angeht.

Karsten S. schrieb:
> Also ich weiß das dies ein hacke -Signal ist. Es ist gut genug für die
> Anwendungen, einen MP3 Player wollte ich damit nicht herstellen :)

Das hat doch nichts mit einem "Hacke-Signal" zu tun. Es ist eine PWM. 
Ein digitales Signal, welches nunmal nur aus 0 und 1 besteht. Und ein RC 
Glied hat nun weißgott nichts mit der Herstellung eines MP3 Players zu 
tun, das ist das was ein DAC Wandler auch macht.

Karsten S. schrieb:
> Das PWM so verhasst ist wusste ich gar nicht :)

Isses nicht, PWM ist eine feine Sache! Eine sehr feine Sache! Aber halt 
richtig angewandt.

Karsten S. schrieb:
> Viele AFU's hassen auch SDR(SoftwareDefinedRadio) ^^.

Solltest du wirklich aus dem Amateurfunk Bereich kommen... dann glaube 
ich langsam wirklich das ich hier einem Troll aufgesessen bin. Denn dann 
wärst du derjenige gewesen der hier einen Tiefpassfilter vorgeschlagen 
hätte um das PWM zu glätten.




Knut B. schrieb:
> Mein lieber Herr Gesangsverein, hier geht ja was ab... So viel Ignoranz
> habe ich lange nicht gesehen...

Dito. Das nenne ich mal Beratungsresistenz! :-D

von Peter II (Gast)


Lesenswert?

Draco schrieb:
> Jetzt mal ehrlich, welchen Wago nutzt du denn? Ich kann mir beim besten
> Willen nicht vorstellen das dies funktionieren soll:

eventuell hat er ja ein paar 100m Kabel bis zur Wago, und damit 
unbewusst eine RC Glied.

von Kahn P. (Gast)


Lesenswert?

10 Meter, steckt im Schrank und ich am Tisch

(welche Beratungsresistenz, nichts wurde dementiert, die Register wurden 
gefunden.

Das nur das Wort analog Output erwähnt worden ist, war das Verbrechen..

Es ist lediglich eine Frage der Wahrnehmung. Und die ist bei allen 
Menschen halt nur ein gestörtes -Interpolat. Wie alles andere auch, 
nichts ist echt :)

von Peter II (Gast)


Lesenswert?

Karsten S. schrieb:
> 10 Meter, steckt im Schrank und ich am Tisch

es ist halt sehr merkwürdig, das es ordentlich funktioniert. Es könnte 
genauso passieren das die Wago mal 5V und beim nächsten messen mal 0V 
anzeigt.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Peter II schrieb:
> es ist halt sehr merkwürdig, das es ordentlich funktioniert.

Das ist einfach nur Glück. Irgendwann ist so eine Glückssträhne aber 
auch wieder vorbei...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Karsten S. schrieb:
> WAGO Busklemme ANL misst zumindest auf ~0.5V genau was ich ausgebe, bin
> dann glücklicherweise mit 8[Khz] noch im Zeitschlitz.
Roulette gespielt und Glück gehabt: die Wago-Klemme 750-457 mit 
Spannungseingang hat laut Datenblatt z.B. eine Messdauer von 10ms.
Oder du hast die 750-467 mit einer Wandlungszeit typ. 2 ms.
Und wegen dieser Wandlungszeiten haben die zum Glück (und zur Beruhigung 
der Herren Nyquist und Shannon) auch ein passendes RC-Glied als Tiefpass 
integriert.
Leider sind diese "Filterblöcke" der Eingangsbeschaltung im WAGO 
Blockschaltbild unüblicherweise nicht als Tiefpass-Filter (Ua als 
Funktion von f) gezeichnet, sondern als Ladekurve von PT1-Gliedern (Ua 
als Funktion der Zeit)...

Und jetzt mal den Bleistift gespitzt und losgerechnet:
Die Klemme mit den schnelleren 2ms (=500Hz) zusammen mit der 8kHz-PWM 
ergeben 8KHz/500Hz = 16 --> 4 Bit "Rauschabstand", und genau das misst 
du mit deiner erreichten "Genauigkeit" von 5V/~0,5V = ~10/1 = ~3,2 Bit.

Hier noch eine Betrachtung, wie du dein RC-Glied auslegen müsstest, wenn 
du tatsächlich auf 1% genau (oder auch genauer) werden willst...
http://www.lothar-miller.de/s9y/archives/11-RC-Glied-fuer-PWM.html

Du siehst: man muss sowas nicht ausprobieren, man kann es ausrechnen 
und weiß dann, was auf einen zukommt.


Karsten S. schrieb:
> Alles funktioniert hier.
Lustig, genau diese Einstellung hatte ich gestern im 
Beitrag "Re: Wie lehrnt man "richtig" einen µC programmieren?" angeprangert... ;-)

Karsten S. schrieb:
> Also ich bin kein Elektroniker, nur ein Softwareentwickler
> und bezüglich welche Register es zu setzen galt damit ich
> mit dem Multimeter was sehe, wurde total erfüllt.
Wenn du als "Nicht-Automechniker" an den Bremsen herumschraubst, dann 
musst du trotzdem wissen was du tust. Du darfst nicht einfach ein paar 
Schrauben weglassen und sagen: "Hält auch so. Was ich wollte ist 
erfüllt!"

Oder andersrum: DU willst aus einem PWM ein Analogsignal erzeugen. Dann 
musst auch DU dir die nötigen Grundlagen und das Wissen dazu aneignen. 
Sonst bleibt das alles nur zufälliges Gebastel...

: Bearbeitet durch Moderator
von Jack (Gast)


Lesenswert?

Als Gast kann man den Beitrag leider nicht bewerten, darum: Danke 
Lothar!

von Kahn P. (Gast)


Lesenswert?

Hallo Lothar,

richtig 750-457, ich sehe auch das der Baustein Atiny85 mit 16.5 bzw 20 
Mhz  läuft ich verwende den internen osc. Implementiert habe ich eine 
eigene Abwandlung der V-USB Schnittstelle.

8Khz..  Stimmt also nicht, es müsste durch die 16.5 Mhz weit mehr sein.
1
void initDAC(void)
2
{
3
  TCCR0A = 3<<COM0A0 | 3<<WGM00; 
4
  TCCR0B = 0<<WGM02 | 1<<CS00;
5
 
6
  OCR0A=0xff;
7
}

Dies ist der "schnellste" Prescaler CS00, ich Messe 10[µs].
Das Teil läuft also mit 100[Khz]. Gemessen Tektronix Osci.

Jetzt mit kurzer Leitung ist das Ergebnis noch besser.

Wüster watt.. ich verkauf das jetzt so weiter, und würde mich damit zum
Mond schießen lassen, und ich wüsste das eine Wiederkehr nicht davon 
abhängen wird :)

Danke für aller Hinweise und Kritik !
  Gruß K aus B

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karsten S. schrieb:
> Wüster watt.. ich verkauf das jetzt so weiter
Mit 100kHz Rechteck und 10m Antenne? Warum eigentlich nicht?

Was ist denn an 1 Widerstand und 1 Kondensator so teuer, dass du es 
nicht gleich richtig machen kannst? Nimm einen 220Ohm Widerstand und 
einen 22uF Kondensator und fertig ist die Laube.

: Bearbeitet durch Moderator
von Draco (Gast)


Lesenswert?

Lothar M. schrieb:
> Karsten S. schrieb:
>> Wüster watt.. ich verkauf das jetzt so weiter
> Mit 100kHz Rechteck und 10m Antenne? Warum eigentlich nicht?

Man bedenke: er ist Amateuerfunker, er müsste wissen was er da tut! :'D


P.s.: Danke Lothar, sehr guter Post mit deiner Berechnung! Die 
Berechnung des "Rauschabstandes" bzw. der eingehenden Geschwindigkeit 
einer PWM in einen Pin abhängig dessen "Eingangsgeschwindigkeit" kannte 
ich noch garnicht, wieder was gelernt. Hilft sehr.

von Karl M. (Gast)


Lesenswert?

Hallo,

es sei noch angemerkt, dass ein Atiny85 auch intern über den RC 
Oszillator mit 16MHz laufen kann.
Und was ich immer wieder mit Timer1 und PWM gerne mache, ist den Timer1 
PWM Kern mit 64MHz bei Vcc=5V betreibe.
Deshalb hat Timer1 einen 4-Bit Prescaler in TCCR1 CS1[3:0]

So kann man einen sehr viel hören PWM-Frequenz erhalten.
z.B. fpwm = 64MHz/ 256 = 250kHz bei 2⁸ PWM Auflösung.

von Kahn P. (Gast)


Lesenswert?

Sehr gut,

so zieht man den Osc auf die maximale Frequenz, hier anhand
eines Beispiels aus V-USB
1
void  calibrateOscillator(void)
2
{
3
  uchar       step = 128;
4
  uchar       trialValue = 0, optimumValue;
5
  int         x, optimumDev, targetValue = (unsigned)(1499 * (double)F_CPU / 10.5e6 + 0.5);
6
7
    do{
8
        OSCCAL = trialValue + step;
9
        x = usbMeasureFrameLength();    /* proportional to current real frequency */
10
        if(x < targetValue)             /* frequency still too low */
11
            trialValue += step;
12
        step >>= 1;
13
    }while(step > 0);
14
15
    optimumValue = trialValue;
16
    optimumDev = x; /* this is certainly far away from optimum */
17
    for(OSCCAL = trialValue - 1; OSCCAL <= trialValue + 1; OSCCAL++)
18
  {
19
        x = usbMeasureFrameLength() - targetValue;
20
        if(x < 0)
21
            x = -x;
22
23
        if(x < optimumDev)
24
    {
25
            optimumDev = x;
26
            optimumValue = OSCCAL;
27
        }
28
    }
29
    OSCCAL = optimumValue;
30
}

So kann man den internen Osc auch auf andere Flanken dynamisch 
ausrichten, einige tinys laufen mit bis zu 20[Mhz] ca 10[%] der Rest 
muss mit 16.5[Mhz] betrieben werden, um sicher die beiden Adern am USB 
zu erwischen.

Das der PWM auf Basis 65[Mhz] laufen kann, verstehe ich nicht, dazu 
müsste man ja die Oberwellen des Schwingers verwenden :)

Grüße
 Karsten

von spess53 (Gast)


Lesenswert?

Hi

>Das der PWM auf Basis 65[Mhz] laufen kann, verstehe ich nicht, dazu
>müsste man ja die Oberwellen des Schwingers verwenden :)

Nö. Nennt sich PLL. 8Mhz*8=64MHz.

MfG Spess

von Karl M. (Gast)


Lesenswert?

Danke Spess,

seht ja auch alles wie immer im Datenblatt und ist kein Geheimnis wie 
damals die HP41 C* Synthetische Programmierung.

spess53 schrieb:
> Hi
>
>>Das der PWM auf Basis 65[Mhz] laufen kann, verstehe ich nicht, dazu
>>müsste man ja die Oberwellen des Schwingers verwenden :)
>
> Nö. Nennt sich PLL. 8Mhz*8=64MHz.
>
> MfG Spess

von Kahn P. (Gast)


Lesenswert?

Hi spess,

ne PLL im tiny..

Ahh: Beitrag "Verständnisfrage: Attiny mit interner PLL als Taktgenerator"

Ist der Atiny nicht ein göttlicher Funken ?
http://hackaday.com/2012/01/26/sprite_tms-three-component-fm-transmitter/
(doch noch MP3^^)

(Mehr Computer braucht man nicht :-)

von S. Landolt (Gast)


Lesenswert?

"Wie magst du deine Schreiberei
nur gleich so hitzig übertreiben?"

von Kahn P. (Gast)


Lesenswert?

Aber..

Ist es nun die kleinste Groß Rechenanlage die man käuflich erwerben kann 
?

Interessant sind wohl auch die geheimen USB-Memory Controler mit 
Autodriver Install. Leider alles Produkte die man nicht kaufen kann oder 
?

Grüße
 K aus B

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
Noch kein Account? Hier anmelden.