www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PortPin richtig ausschalten


Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: PJ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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" :)

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
  ldi    temp, (1<<wgm12 | 0<<cs12 | 0<<cs11 | 0<<cs10) 
  out     tccr1B,temp
  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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin K. schrieb:
> Hi,
>
>   ldi    temp, (1<<wgm12 | 0<<cs12 | 0<<cs11 | 0<<cs10)
>   out     tccr1B,temp
>   cbi     portb, 1
> 
>
> 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin K. (spyro07)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die COM-Bits entscheiden über den Zugriff auf das Portpin.

Stimmt, hast recht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.