Forum: Mikrocontroller und Digitale Elektronik Pin wird einfach auf high gesetzt


von Chris (Gast)


Angehängte Dateien:

Lesenswert?

Hi Leute
Mal schaun vieleicht könnt ihr mir helfen.

Im Anhang ist mein kompletes Programm, aber das Problem liegt hier:

1
ISR(TIMER1_COMPA_vect)
2
{
3
  if (hilf == 0)
4
  {
5
    PORTA |= 0x20;
6
    hilf = 1;
7
  }
8
  else
9
  {
10
    PORTA &= ~0x20;
11
    hilf = 0;
12
  }  
13
}


Am PINA5 hab ich eine LED angeschlossen und am PINA6 einen Summer.
In dieser ISR sollte nur der PIN5 getoggelt werden. Aus irgendeinen 
Grund wird jedoch auch der PIN6 getoggelt was dazu führt, wenn die LED 
leuchtet auch der Summer ein Signal von sich gibt. Wenn ich beim 
Debuggen wärend des Programmverlaufes stoppe hängt das Programm immer in 
der DELAY BASIC (delay loop 2).

Ich hoffe ihr könnt mir weiterhelfen ;)

von Chris (Gast)


Lesenswert?

Was ich noch vergessen hab zu erwähnen ist, Wenn ich in Das PORTA 
Register schaue ist der besagte Pin auch nicht auf High dennoch liegen 
5V an.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Lötbrücke?

von Blödmann (Gast)


Lesenswert?

Mal abgesehen von dem wahrscheinlich vorhandenen Kurzschluss zwischen 
PIN5 und PIN6, kannst Du das Toggeln auch viel einfacher, ohne 
Hilfsvariable, erreichen.
Die Information die in der Hilfsvariablen steckt, ist ja auch in dem 
Zustand des Pins enthalten. Es reicht also:
1
ISR(TIMER1_COMPA_vect)
2
{
3
  PORTB ^= (1<<PB5);
4
}

von Chris (Gast)


Lesenswert?

naja dann müsste es umgekehrt genau sein wenn der Summer auf high is das 
auch die LED leuchtet was nicht der Fall ist

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nicht glauben... messen... außerdem solltest du deine Variablen für die 
IRQs entweder Funktionsstatisch oder volatile deklarieren.

von Blödmann (Gast)


Lesenswert?

>naja dann müsste es umgekehrt genau sein wenn der Summer auf high is das
>auch die LED leuchtet was nicht der Fall ist

Um das abschliessend zu beurteilen, müsste man die Schaltung kennen. Da 
aber üblicherweise bei den AVR-Schaltungen die LED an Vcc angeschlossen 
wird und nicht an Masse, ist die Vermutung, dass ein Kurzschluss 
vorliegt erstmal plausibel.

Also, das nächste Mal die Schaltung angeben, dann brauchen wir nicht 
herumzuraten. ;-)

von Chris (Gast)


Lesenswert?

es ist 100% was programmier technisch ...
ich habe ein neues programm geschieben welches genau das selbe macht ... 
außer den Externen Interrupt

und dabei bleibt der Summer stumm

von Chris (Gast)


Lesenswert?

zudem die kontakte am steckbrett durch gemessen

von Blödmann (Gast)


Lesenswert?

>es ist 100% was programmier technisch ...
>ich habe ein neues programm geschieben welches genau das selbe macht ...
>außer den Externen Interrupt

>und dabei bleibt der Summer stumm

Mein lieber Chris: Du kannst ja Deine eigenen Fehlersuchmethoden 
anwenden. Das sei Dir unbenommen. Aber dann frage nicht uns.

Es ist nunmehr also bei zwei Programmen, von denen wir eines garnicht 
und ein anderes nur in einem Fragment kennen, fraglich ob Du genau das 
geschrieben hast, was Du beabsichtigt hast oder nicht.
Und warum Du nun nicht einfach die Platine umdrehst und mal nachschaust 
(oder nachmisst) ist mir ehrlich gesagt auch nicht recht verständlich.

Ich halte mich 'raus.

von Chris (Gast)


Lesenswert?

Sorry aber wenn du nicht mal alles liest dann kannst dich ruhig 
aufregen...

1) ICH HABE EIN STECKBRETT und dabei die Kontakte auf Kurzschluss 
gemessen
2) Hab ich am anfang bereits erwähnt, das sich das Programm in der DELAY 
Schleife aufhängt

von Blödmann (Gast)


Lesenswert?

Ich habe Dir unrecht getan in Bezug auf das vorliegen des kompletten 
Quellcodes. Das tut mir leid.

>Sorry aber wenn du nicht mal alles liest dann kannst dich ruhig
>aufregen...

Mir ist das egal ob Du Dein Problem löst oder nicht. Du schätzt Deine 
Bedeutung zu hoch ein, wenn Du meinst, das ich mich Deinetwegen aufrege.

>1) ICH HABE EIN STECKBRETT ...
Schrei mich nicht an!

Das mit dem Steckbrett hast Du geschrieben während ich meine Antwort 
schrieb. Deswegen konnte ich es noch nicht wissen.

von Εrnst B. (ernst)


Lesenswert?

Nebenbei:
> #include <avr/iom32.h>
Ist überflüssig, Raus damit.
<avr/io.h> sollte das schon inkludiert haben.


Wegen dem Toggeln von PIN6: Das macht vermutlich deine main().

Nimm das da mal raus, und schau ob das noch auftritt. Wenn nicht: Check 
deine Timer/ISR initialisierungen. Evtl. löst ein nicht abgefangener 
Interrupt (oder der WDT, ist der sicher nicht aktiv?) regelmäßig einen 
Reset aus.

von Chris (Gast)


Lesenswert?

ok wenn ich das Setzen des Pin6 aus der Main raus mach dann ist das 
problem weg ... aber müsste der prozessor nicht zurück in die while 
schleife springen nach dem Interrupt ... demnach das vor der schleife 
ignorieren ?

von Εrnst B. (ernst)


Lesenswert?

Chris schrieb:
> aber müsste der prozessor nicht zurück in die while
> schleife springen nach dem Interrupt

nach dem Timer1-Compare: schon.

aber was macht er nach dem Timer0-Overflow?

von Lehrmann M. (ubimbo)


Lesenswert?

Fehlt bei deinem Interrupt nicht irgendwas ?

von Thomas E. (thomase)


Lesenswert?

Εrnst B✶ schrieb:
> Interrupt (oder der WDT, ist der sicher nicht aktiv?) regelmäßig einen
> Reset aus.

Wenn das im Anhang der komplette Code ist, fehlt die ISR für Timer0.
Womit er dann regelmässig beim Resetvektor landet.

mfg.

von Chris (Gast)


Lesenswert?

VERDAMMT ...  ok das erklärt einiges
danke leute habt mir echt weiter geholfen auch wenns ein "idioten" 
Fehler von mir war xD

und sorry an den Blödman wegen dem stress

von Blödmann (Gast)


Lesenswert?

>und sorry an den Blödman wegen dem stress

Schon gut. Tut mir auch leid.
Nett von Dir, dass Du noch was vermittelndes anfügst. :-)

von Thomas E. (thomase)


Lesenswert?

Blödmann schrieb:
> Nett von Dir, dass Du noch was vermittelndes anfügst. :-)

Finde ich auch gut. Dein Name hat aber auch irgendwie etwas 
Unterwürfiges.

mfg.

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.