mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ein- & Ausgänge spielen verrückt ATmega128


Autor: Kay (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend!

Hab ein Problemm mit dem ATmega 128 als fertiges Board mit 16Mhz 
Quarz(siehe Anhang). Programmierung in C über AVRstudio und einen 
USB-ISP Compiler.

Wenn ich im die Ausgänge definiere (mit DDRA=0xff; und dann noch 
DDRE0=ff;) und ihm dann ganz einfach einen Port schalte 
(PORTE=(1<<PE0);) und das einfach mal herein lade, läuft alles erstmal 
so wie es soll.

An den Ausgängen A ist kein Signal und an den ganzen Eingängen wird kein 
Signal angelegt und liegt auch keins an. Man kann dann auch schön seine 
fast 5V am Port E0 messen. Also alles soweit okay.

Wenn ich jetzt jedoch ein Umfangreicheres Programm mit Eingangsabfragen 
über if und while mache bekomme ich im nicht beschalteten Zustand (nicht 
angeschlossen, die nackten Pins) richtig komische Zustände. Ausgänge um 
die 2,5V und Eingange um die 1,7V. Die Pull-Widerstände sind nicht 
deaktiviert worden oder des gleichen.

Liegt das evtl. an einer Compilereinstellung oder sollte ich die Ein- & 
Ausgänge besser anders definieren und wenn wie (vielleicht ein kleines 
Beispiel).

Danke schon mal für die Hilfe

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie fragst Du denn die Eingänge genau ab?

Poste das Programm

Gruss Otto

Autor: Kay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier mal Auszüge:

#define F_CPU 16000000

#include <avr/io.h>
#include <util/delay.h>

// Übung mit Probeplatine !!!

int main (void)
{
    // Ausgänge-Eingänge definieren !!!

    DDRA=0xff;
    DDRB=0x00;
    DDRC=0x03;
    DDRD=0x00;
    DDRE=0x0f;
    DDRF=0xff;
    DDRG=0x00;



    while(1)     // Endlosschleife damit das Programm nicht stoppt
    {


        if((PORTC&0x40) && (PORTD&0x80))
        {
            PORTF~=(1<<PF3);
            PORTE~=(1<<PE1);
            PORTF=(1<<PF2);
            PORTE=(1<<PE0);
        }

usw.

Ich hoffe der kleine Auszug reicht um dir ein Bild machen zu können. Das 
Programm ist zwar größer aber immer nach diesem Muster aufgebaut. 
Einzige besonderheit das auch mal ein delay kommt aber sonst ganz 
schlicht mit if und while.
Die Eingänge sind teilweise Taster oder auch Schaltkontakte(z.B. 
Endlagenschalter) die dann ein Signal auf den Eingang bringen.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So geht das nicht - lies bitte:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Gruss Otto

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn deine Ausgänge nicht wirklich VCC bzw. GND anliegen haben,
z.B. nur ein Taster nach GND, fehlt ein PullUp.

Die Pins werden mit PINA, PINB... abgefragt.

Dafur gibt es

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

gruß avr

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
soll das vielleicht
            PORTF |= (1<<PF2);
            PORTE |= (1<<PE0);
heißen?

Autor: Kay (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DANKE !!!

Tja, manchmal sieht man den Wald vor lauter Bäumen nicht. Ist in 
Tutorials ja auch extra rot markiert. Kann mir mein Fehler mit PORT und 
PIN schon erklären, hab halt Befehlzeilen (um die Arbeit zu erleichtern 
kopiert) und dann nur die Zahlen jeweils geändert und garnicht auf das 
geachtet, einfach glaubig überlesen.

Aber kann das dann schon das spinnen der Ein und Ausgänge beheben oder 
ist da evtl. noch etwas anderes im argen???

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreibe Dein Programm so, wie es im Tutorium steht.

Wenn Du z. B. Ausgänge auf "1" setzt, deren DDR auf Eingang steht, 
schaltest Du nur den internen Pull-up.

Otto

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Noch wichtig: Um PortF zu benutzen muss JTAG abgeschaltet werden.

MfG Spess

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.