PortPin richtig ausschalten

OP #1255110
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
Moderator (Firma: Titel) Persönliche Seite
> 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.
Gast
>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.
Gast
>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
Gast
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
Gast
> 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.
Gast
>> 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" :)
OP
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.
Gast
>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 :-)
OP
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
Gast
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
OP
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?
Gast
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.
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.