www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit den Ports beim 2561


Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo zusammen,
ich bin gerade mal wieder am üben und fange nun auch ganz klein an.
allerdings kann ich mir nicht erklären, warum ich auf port G0 einen 
eingang einlesen kann und auf den D und C ports nicht. hardware 
funktioniert. wenn ich die sicherungsdatei vom anlieferungszustand 
einspiele, kann ich über den software-porttester alle eingänge lesen. 
also funktioniert alles mit der hardware.

kann mir hier jemand einen tipp geben an was da liegen könnte ?
software: AVR programmers notepad
Atmel 2561

diese dateien werden eingebunden:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <util/delay.h>
#include <math.h>
#include <avr/pgmspace.h>
#define LCD_DDR DDRB


code:
// Eingänge definieren

    DDRG &= ~(1 << PG0); // PG0 als Eingang festlegen
    PORTG |= (1 << PG0); // Pullup für PG0 aktivieren

    DDRC &= ~(1 << PC1); // PC1 als Eingang festlegen
    PORTC |= (1 << PC1); // Pullup für PC1 aktivieren



{if (PING & (!(0 << PG0))) {LED_OFF_5;} // Wert von PG0 prüfen

     else {LED_ON_5;}
     }




     {if (PINC & (!(0 << PC1))) {LED_OFF_1;} // Wert von PC1 prüfen

     else {LED_ON_1;}
     }


gruss martin

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(!(0 << PG0)))

eine 0 um PG0 stellen nach links verschieben ist ziemlich sinnfrei.
Da kommt immer noch 0 raus.
Das "!" invertiert den nachfolgenden Ausdruck logisch, was in C zu 
deinem Glück eine 1 ist.

Wegen PortC: Guck mal nach, ob da das JTAG-Interface mit integriert ist.
Das "behindert" die normalen Portfunktionen, lässt sich aber abstellen.
(Ich habe mir nicht das Datenblatt angeguckt. Atmel nutzt bei diversen 
Controllern PortC als JTAG-Port...)

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
port F4 - F7 ist für JTAG reserviert.
die abfrage vom port G0 funktioniert richtig und es wird der ausgang 
gesetzt.
die andere abfrage von C1 geht nicht. wie wenn die belegung nicht 
stimmt.
kann es sein, dass die definitionsdatei der belegung vom 2561 falsch 
eingestellt ist ?

wie gesagt, wenn ich meine sicherungskoie vom originalzustand übertrage 
gehen alle eingänge. leider habe ich davon keinen quellcode.

gruss martin

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>if (PINC & (!(0 << PC1))) {LED_OFF_1;}

Schreib stattdessen mal

if (!(PINC & ((1 << PC1))) {LED_OFF_1;} // Wert von PC1 prüfen

else {LED_ON_1;

Sollte das (meine Lösung) funktionieren, dann solltest du dir mal das 
AVR-GCC-Tutorium hier auf der Seite angucken (Du solltest es dir auf 
jeden Fall angucken!).
Dann solltest du dir darüber klar werden, was deine Abfrage macht, und 
was der Unterschied zu meiner Version ist.

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank...hast zwar eine klammer vergessen zu schliessen..aber das 
hab ich dann selber gefunden :-)

jetzt funktioniert es.

vielen dank für deine hilfe..dann werd ich mal zum AVR-GCC-Tutorium 
gehen und mich einlesen.

gruss martin

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hast zwar eine klammer vergessen zu schliessen

Man kann sich mit Klammern auch totschmeissen...
Es war ein Copy'n'Paste-Fehler...

Autor: Martin Schmid (paul-stanley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..ist ja auch nicht schlimm und ich bin froh dass du mir weitergeholfen 
hast.

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.