Probleme mit den Ports beim 2561

OP #791043
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
Gast #791055
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...)
OP #791066
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
Gast #791079
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren