Hi, ich toggle bei meinem Mega8 den OC1 PIN. Da eine gepulste LED dranhängt muss dieser Port unbedingt sicher ausgeschaltet werden. Die LED wird über einen BC337 getrieben. Nur ist das Problem, wenn ich den PIN mit cbi.. auf LOW setze, dann funktioniert das manchmal paarmal hintereinander, aber manchmal ist die LED auch weiterhin an. Woran kann das liegen? Softwaremäsig ist ja alles richtig. Wie kann ich sichern, das die LED mit Garantie ausgeschalten wird? mfg
> Softwaremäsig ist ja alles richtig. Ich glaube, in Zeile 42 ist ein Fehler... :-/ > Softwaremäsig ist ja alles richtig. Dann ist der Fehler in der Hardware, R 42 oder T 42 sind da die üblichen Verdächtigen... :-o Im Ernst, wie erwartest du eine Fehlerdiagnose mit dieser Beschreibung, und dem stolzen Zusatz: Meine Software hat keinen Fehler? Poste bitte einen Schaltplan und die Software, dann kann dir evtl. jemand helfen.
>Softwaremäsig ist ja alles richtig.
Dann kann es nur ein Fehler in der Controllerhardware sein, den vor Dir
noch niemand bemerkt hat. Das gilt zwar als extrem unwahrscheinlich, ist
aber auch nicht völlig ausgeschlossen.
>Das gilt zwar als extrem unwahrscheinlich, ist >aber auch nicht völlig ausgeschlossen. Da ist es wohl wahrscheinlicher, das dieser eine Mega8 eine Macke hat. Wenn alles andere richtig ist, bleibt ja nur diese Möglichkeit. Oliver
Martin K. schrieb:
> Woran kann das liegen? Softwaremäsig ist ja alles richtig.
Geh bitte in die Medizintechnik, Kraftwerkstechnik usw., da kannst Du
Dich dumm und dämlich verdienen.
Die suchen nämlich händeringend Leute, die beweisen können, daß
irgendeine Software richtig ist.
Erfahrene Softwareentwickler halten allerdings die Entwicklung des
Perpetuum Mobile für einfacher.
[Glaskugelmodus an]
Dein Softwarefehler wird sein, daß Du die PWM nicht ausschaltest und
dann ist ein Schreiben auf den Pin wirkungslos.
Peter
>Die suchen nämlich händeringend Leute, die beweisen können, daß >irgendeine Software richtig ist. Es gibt Leute die behaupten dass deren Software immer richtig geschrieben ist, nur der Compiler denkt sich die Fehler selber aus.
Auch ein Compiler ist nur ein Mensch. :-)) Nein, im Ernst: Auch solche Programme werden von Menschen geschrieben und können auch Fehler enthalten. Aber: Es muß nicht am Compiler liegen, auch andere Effekte sind lustig. Beispiel: Ich hatte ein Programm für einen Attiny24 geschrieben, was ein 3-stelliges Voltmeter mit 7-Segment-Anzeige realisiert. (mit Bascom) Ich bekam allerdings utopische Meßwerte. Auch andere Leute mit anderen Programmen hatten bei Verwendung des Attiny24/44/84 böse Effekte. Lösung: Die Include-Datei aller 3 (seinerzeit neuen Typen) enthielt den gleichen Fehler. (durch Vergleich der Original-Include-Dateien vom Onkel Atmel mit den in Bascom enthaltenen festgestellt) Freilich liegt der Fehler fast immer beim Quelltextverfasser- aber eben nicht immer. MfG Paul
> Es gibt Leute die behaupten dass deren Software immer richtig > geschrieben ist, nur der Compiler denkt sich die Fehler selber aus. Diese Leute sollten Compiler schreiben.
>> Es gibt Leute die behaupten dass deren Software immer richtig >> geschrieben ist, nur der Compiler denkt sich die Fehler selber aus. >Diese Leute sollten Compiler schreiben. Diese Leute haben es vollbracht! -> "Künstliche Intelligenz" :)
Hi,
1 | ldi temp, (1<<wgm12 | 0<<cs12 | 0<<cs11 | 0<<cs10) |
2 | out tccr1B,temp |
3 | cbi portb, 1 |
also wie gesagt, manchmal funktioniert es richtig und manchmal eben nicht. Ich schalte den Vorteiler des Teilers aus, dann dürft ja auch nicht mehr der PIN toggeln. Dann lösche ich mit dem cbi noch den betreffenden PIN. Im Simulator geht es und auch manchmal in der Praxis, eben nur manchmal.
Martin K. schrieb: > Hi, >
1 | > ldi temp, (1<<wgm12 | 0<<cs12 | 0<<cs11 | 0<<cs10) |
2 | > out tccr1B,temp |
3 | > cbi portb, 1 |
4 | > |
> > also wie gesagt, manchmal funktioniert es richtig und manchmal eben > nicht. PeDa schrieb: > [Glaskugelmodus an] > Dein Softwarefehler wird sein, daß Du die PWM nicht ausschaltest > und dann ist ein Schreiben auf den Pin wirkungslos. Wo hast du deine Kugel gekauft? Ich werf meine sofort auf den Müll und hol mir auch so ein Teil.
>Ich schalte den Vorteiler des Teilers aus, dann dürft ja auch nicht mehr >der PIN toggeln. Du lässt aber den PWM-Modus enabled! "Fehlerfreie Software"... haha, klasse Joke.
und das es manchmal "funktioniert" liegt einfach daran, dass Programm und Timer asynchron laufen. Der Timer wird zwar angehalten, der Pin behält aber den Wert, den er aus dem letzten PWM-Zyklus noch hatte. Lässt du deinen cbi-Befehl weg, erhälst du dasselbe Ergebnis :-)
H.joachim Seifert schrieb: > und das es manchmal "funktioniert" liegt einfach daran, dass Programm > und Timer asynchron laufen. Der Timer wird zwar angehalten, der Pin > behält aber den Wert, den er aus dem letzten PWM-Zyklus noch hatte. > Lässt du deinen cbi-Befehl weg, erhälst du dasselbe Ergebnis :-) Könntest du mir das nocheinmal erklären? Weil ich halte ja den Timer an und dann dürfte bei dem ja nichts mehr geändert werden, oder? Also auch nicht der PIN. Und wenn ich nun den letzten Status lösche also den PIN auf low ziehe müsste es doch eigentlich gehen? Wo liegt da mein Denkfehler? mfg
Hi
>Wo liegt da mein Denkfehler?
Solange COM1A1/COM1A0 in TCCR1A nicht 0 sind hat die PWM Oberhaupt über
das OCR1-Pin. Egal, ob deine PWM an oder aus ist. Da kannst du mit dem
Port-Pin spielen, bis du schwarz wirst.
MfG Spess
Martin K. schrieb: > Weil ich halte ja den Timer an und dann dürfte bei dem ja nichts mehr > geändert werden, oder? > Also auch nicht der PIN. Und wenn ich nun den letzten Status lösche also > den PIN auf low ziehe müsste es doch eigentlich gehen? > Wo liegt da mein Denkfehler? Du hast es immer noch nicht. Solange du deinen Timer hardwaremässig mit dem Port-Pin gekoppelt hast, kannst du mit sbi bzw. cbi den Pin malträtieren solange du willst. Die PWM hat die Kontrolle über den Pin und sperrt deinen cbi einfach aus. PWM komplett abschalten, sprich die Verbindung Timer-Pin wieder lösen. Dem Timer einfach nur den Vorteiler zu klauen ist zuwenig! Du könntest ja die PWM später wieder weiter laufen lassen
Ok. Jetzt, wenn ich die PWM ausschalte, funktionierts, wie es aussieht. Also wenn ich das jetzt richtig verstanden habe, kann ich, wenn ich den Timer PWM den PIN toggeln lasse, den PIN nicht merh beeinflussen, auser mit dem Timer, also alle anderen Befehle "von ausen" sind sinnlos. Ist das richtig so?
genauso ist es. Denselben Effekt hat z.B. der TxD-Pin, ist der Transmitter enabled, kannst du auf den Port schreiben, was du willst, kommt nicht an.
Wenn das Bit WGM12 im TCCR1B gesetzt ist, haben nicht mehr DDR und PORT die Kontrolle über den Pin, sondern der Timer (Datenblatt: "Alternate port functions"). Ob der Timer gerade läuft oder nicht, ist dabei egal. Das ist alles.
Hi
>Ok. Jetzt, wenn ich die PWM ausschalte, funktionierts, wie es aussieht.
Das hat nichts mit Ausschalten zu tun. Die PWM kann (obwohl sinnfrei)
weiterlaufen. Du trennst lediglich (siehe oben) die PWM vom Portpin.
MfG Spess
Hi >Wenn das Bit WGM12 im TCCR1B gesetzt ist, haben nicht mehr DDR und PORT >die Kontrolle über den Pin, sondern der Timer (Datenblatt: "Alternate >port functions"). Nein. Die COM-Bits entscheiden über den Zugriff auf das Portpin. MfG Spess
>Die COM-Bits entscheiden über den Zugriff auf das Portpin.
Stimmt, hast recht.
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.