Werbung
![]()
![]()
Also wenn die 88 der Wert für den Maximalwert des Timers im CTC Modus sein soll, ist es vermutlich durch einen Flüchtigkeitsfehler trotzdem total falsch. Angenommener Flüchtigkeitsfehler bereinigt, ist die 88 der Wert, mit dem man der gewünschten Frequenz am nächsten kommt.Wenn ich eine Frequenz von 1400 kHz benötige wären das 88 bei einem Prescaler von 8.![]()
Gleicher Flüchtigkeitsfehler (?) und man kann mit einem anderen Wert als 53 wesentlich näher an die gewünschte Frequenz heran kommen.Bei 2100 kHz müssten es 53 sein.
Wenn Du die Rechnung mitlieferst und auch die Einheiten mit aufschreibst, kann man besser erkennen, wo der Hase im Pfeffer liegen könnte.
Das wird aber schon. Ich habe selbst viel durch ausprobieren "erforscht". Also einfach Programm in den µC und nachgeschaut was da raus kommt. Ich kenne Deinen Hintergrund und Deine Möglichkeiten nicht. Hier wäre ein Oszilloskop, Frequenzzähler oder ähnliches hilfreich. Bei den geringen Frequenzen täte es auch ein Soundkartenoszi.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Hallo Searcher,
danke für deine Antwort.
Ich habe die 1000000:8 und dan 125000:1400=89
Bei den 89 habe ich 1 abgezogen ( so wie Ihr mir das gesagt habt )
Somit kamm ich auf 88.
Du hast mir ja noch einen Link gegeben.
Dort steht:
( Nun wird mathematisch überprüft, ob der errechnete Wert aus dem vierten Punkt kleiner als der maximale Zählerwert ist. Trifft dies zu, so wird der errechneten Wert vom maximalen Zählerwert subtrahiert )
Wenn ich das so machen muss, würde bei mir ein Wert von 167 raus kommen.
Ein Oszilloskop zum testen habe ich hier.
Gestern habe ich es auch genau so gemacht wie Du es geschrieben hast.
Immer ein wenig probiert und sofort am Oszilloskop das Ergebniss angeschaut.
Nur leider gibt mein Attiny45 aus irgend einem Grund keinen Wert mehr aus ?
Habe es auch schon mit einem ganz neuen Attiny versucht.
Genau das leiche Problem.
Kann über den Port LED blinken lassen oder auch einen Taster steuern.
Nur das PWM Signal kommt nicht mehr raus.
Im Code kann ich keinen Fehler finden.
Bzw mit diesem Code hat es ja auch ohne Probleme funktioniert.
Vielen Dank mal wieder für die nette Hilfe.Code:#include <avr/io.h> #define F_CPU 1000000 int main(void) { DDRB |= (1<<PB1); OCR0A = 124; OCR0B = 63; TCCR0A = (1<< COM0B1) + (1<< WGM01) + (1<< WGM00); TCCR0B = (1<<WGM02) + (1<< CS01); while (1) { asm ("NOP"); } }
Das paßt auch aber Du hast die Einheiten nicht mitgeschrieben. Oben stehen 1400kHz obwohl Du 1400Hz meinstDas ist das, was ich mit total falsch meinte. Die 88 sind für die ungefähr 1400Hz OK!
Die 53 stimmen aber nicht!
Oszilloskop verstellt? Tasköpfe guten Kontakt? Keine andere Masseverbindung als über Meßkabel zB über Programmer-PC-Schutzkontakt zum Oszi?Immer ein wenig probiert und sofort am Oszilloskop das Ergebniss angeschaut.
Nur leider gibt mein Attiny45 aus irgend einem Grund keinen Wert mehr aus ?
Habe es auch schon mit einem ganz neuen Attiny versucht.
Kann über den Port LED blinken lassen oder auch einen Taster steuern.
Nur das PWM Signal kommt nicht mehr raus.
Im Programm kann ich auch erstmal keinen Fehler entdecken. Ich bin aber kein C Programmierer. Pluszeichen bei den Registerzuweisungen sind jedoch anscheinend unüblich, obwohl es wohl funktioniert. Es ist üblicher dort ein Veroderungszeichen zu setzen, also so:
Ein unendliche while Schleife, in dem nichts passiert, kann man so meine ich, auch einfach mit Semikolon abschließen - aber absolut ohne Gewähr. Das ASM nop irritiert mich.Code:TCCR0A = (1<< COM0B1) | (1<< WGM01) | (1<< WGM00); TCCR0B = (1<<WGM02) | (1<< CS01); while (1);
Wenn man den OCR0A Wert in dem Modus dem OCR0B Wert von oben annähert ist Obacht geboten, weil es ja irgendwann keinen Comparematch für die PWM geben kann, da der TCNT den OCR0B-Wert nicht mehr erreichen kann.
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Hallo Searcher,
mal wieder vielen Dank für deine Hilfe.
Am Oszi lag es nicht.
Habe es mit einem Attiny 24 versucht.
Da geht es sofort.
Nochmals zwei neue Attiny 85 getestet ( kein PWM Signal ) komisch komisch.
Benötige ich zwingend die Minimal Beschaltung für den Attiny ?
Oder sollte es auch ohne funktionieren ?
Hallo,
Was verstehst Du da genau drunter? Für mich würde das ein 10kΩ Widerstand von RESET nach Vcc und ein 100nF Kerko direkt an die GND Und Vcc Anchlüsse des Tiny bedeuten. Damit kannst Du jetzt Unsicherheiten ausschließen.
Ich habe gerade vor ein paar Tagen "gezwungenermaßen"das AVR-Studio installiert -programmiere sonst mit BASCOM- und auch ein ATTiny25 auf dem Steckbrett sitzen. Da habe ich jetzt Dein letztes Programm für den Tiny25 (habe keinen Tiny85 zur Hand, der ja außer einem größeren Speicher gleich ist und das gleiche Datenblatt hat) compiliert und es läuft trotz + Zeichen und ASM nop wunderbar. Ich benutze nur ein Steckernetzteil und auch keine Minimalbeschaltung. Also blank den Tiny ins Steckbrett und Strom dran. Es mag aber trotzdem bei Dir wegen zB anderer Stromquelle, Zuleitungen, Störungen, ... nötig sein. Du kannst das Oszi mal auf die Versorgung hängen und den Einfluß eines 100nF Abblockkondensators beobachten. Mir lief es eiskalt den Rücken runter und wenn irgendwas nicht geht, stecke ich so ein Ding als erstes dazu, wenn es nicht vorhanden ist.
Ist das ein Steckbrettaufbau? Da ist natürlich auch Schmutz in den Kontakten oder die Kontakte selbst eine Fehlerquelle. Vor dem Compilieren den richtigen µC ausgewählt? Ein Clean vor dem Build durchgeführt? (also Löschen früherer erzeugte Compiler Dateien im Projekt. Ich glaube so ist es sicher, hab ich aber bei meinem AVR Studio 4.19 noch nicht alles ausgetestet.)
Am Programm liegt das Problem nicht. Bei mir gab es statt 1kHz eine Frequenz von 1,054kHz. (Gemessen direkt am OC0B (PB1) ohne weitere Beschaltung des Pins) Liegt an dem internen Oszillator, den ich über den aktivierten CLKO (PB4) gemessen habe. Liegt bei 1,055MHz (kleine Meßfehler durch Oszi eingeschlossen)
Gruß
Searcher
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
@Searcher das ist Deterministischer Programmierstil und immer zu Empfehlen! So hat man ein definiertes Verhalten, denn ein asm("nop"); kann nicht optimiert werden, wohingegen bei einer leeren Schleife nicht garantiert werden kann dass er es niemals wegoptimiert, weil es dafür keine Vorschriften gibt.Das ASM nop irritiert mich
Warum der Tiny jetzt keinen Ton mehr von sich gibt ist äußerst seltsam ... aber nur zur Sicherheit gefragt, du hast den Programmieradapter abgezogen bevor du gemessen hast oder? PB1 ist auch der MISO Pin und soweit ich weis wird der fürs programmieren verwendet.
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Lesezeichen