www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik atmega128 reagiert nicht auf Eingänge


Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche den atmega128 mit AVR-Studio4 zu programmieren und habe nun 
einige mini-testprogramme geschrieben:

z.B: Signal durchschalten

#include <avr/io.h>

int main(void)
{
   DDRB=0xFF;
   PORTB=0xFF;
   DDRE=0x00;
   PORTE=0xFF;

   while(1)
  {
    if(PORTE==0xFF)
    {
      PORTB=0xFF;
    }
    else
    {
      PORTB=0x00;
    }
  }



}

jedoch ändert sich der Ausgang nicht, ich habe zwar schon vermutet, dass 
der Eingangsport defekt ist, jedoch funktioniert es mit einem anderen 
Port auch nicht.

Ist in der Software irgend ein Fehler???

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael H.

>    if(PORTE==0xFF)

Klassischer Fehler. ;-)
Versuch mal

if(PINE==0xFF)

MFG
Falk

Autor: anworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Quelltext soll also dann alle Pins an PORTB hochziehen, wenn ALLE 
Pins an PORTE high sind, und sonst alle Pins an PORTB runterziehen ?

Wie ziehst Du denn alle Pins von PORTE auf "1" ?

Autor: Michael H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>     Wie ziehst Du denn alle Pins von PORTE auf "1" ?

das problem ist, dass wenn ich den PORTE auf 0 ziehe, PORTB gar nicht 
erst reagiert, also zu dem fall bin ich noch nicht gekommen,



und es stimmt schon ich muss "if(PINE==0xFF)" schreiben, doch das habe 
ich auch schon versucht und es hat nicht funktioniert.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael H.

>>     Wie ziehst Du denn alle Pins von PORTE auf "1" ?

>das problem ist, dass wenn ich den PORTE auf 0 ziehe, PORTB gar nicht

Das sind aber 8 Pins, das ist dir hoffentlich klar?

>erst reagiert, also zu dem fall bin ich noch nicht gekommen,

In deiner Routine reagiert er nur, wenn du alle 8 Pins (=PORTE) auf 0 
ziehst, mittels Taster oder so. Denn du schaltest bei PORTE die internen 
Pull-ups ein.

>und es stimmt schon ich muss "if(PINE==0xFF)" schreiben, doch das habe
>ich auch schon versucht und es hat nicht funktioniert.

Schreib mal

if((PINE & 0x01) ==0x01)

dann regiert dein Prgramm nur auf EINEN PIN, nämlich PE0.

MfG
Falk

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In deiner Routine reagiert er nur, wenn du alle 8 Pins (=PORTE) auf 0
> ziehst,
Nein, es reicht, wenn ein Pin 0 ist, weil dann PINE nicht mehr 0xFF 
ist...

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, stimmt. :-(
Bin im Stress!

MFG
Falk

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist PORTB 1 oder 0 wenn du es ausprobierst?

Autor: Michael.h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe das problem schon behoben, k.a. was da nicht funktioniert hat, 
beim ca. 8. mal probieren hats geklappt, trotzdem danke an alle

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.