PortPin richtig ausschalten

OP #1255110
Lesenswert?
• ▲
▼
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 #1255160
Lesenswert?
• ▲
▼
> 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 #1255277
Lesenswert?
• ▲
▼
>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 #1255340
Lesenswert?
• ▲
▼
>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
#1255397
Lesenswert?
• ▲
▼
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 #1255747
Lesenswert?
• ▲
▼
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 #1255767
Lesenswert?
• ▲
▼
>> 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 #1255977
Lesenswert?
• ▲
▼
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.
#1255985
Lesenswert?
• ▲
▼
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.
OP #1256328
Lesenswert?
• ▲
▼
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 #1256343
Lesenswert?
• ▲
▼
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
#1256349
Lesenswert?
• ▲
▼
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 #1257103
Lesenswert?
• ▲
▼
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 #1257132
Lesenswert?
• ▲
▼
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 #1257140
Lesenswert?
• ▲
▼
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 #1257149
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren