Forum: Mikrocontroller und Digitale Elektronik PortPin richtig ausschalten


von Martin K. (spyro07)


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

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


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.

von Gast (Gast)


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.

von Oliver (Gast)


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

von Peter D. (peda)


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

von A. F. (artur-f) Benutzerseite


Lesenswert?

>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.

von Paul Baumann (Gast)


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

von PJ (Gast)


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.

von Z8 (Gast)


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" :)

von Martin K. (spyro07)


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.

von Karl H. (kbuchegg)


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.

von Gast (Gast)


Lesenswert?

>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.

von H.Joachim S. (crazyhorse)


Lesenswert?

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 :-)

von Martin K. (spyro07)


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

von spess53 (Gast)


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

von Karl H. (kbuchegg)


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

von Martin K. (spyro07)


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?

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von Gast (Gast)


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.

von spess53 (Gast)


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

von spess53 (Gast)


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

von Gast (Gast)


Lesenswert?

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