Forum: Mikrocontroller und Digitale Elektronik ATMEGA644 PORTA und C nicht sauber ansteuerbar


von Bernd H. (masterz)


Lesenswert?

Hallo Community,

Fakten:

ATMEGA644 mit Bootloader vorinstalliert
Arduino SW zum Programmieren
UM232 Eval Kit um SW per USB auf den uC zu bringen.


Problem:

Port B und D lässt sich Pinweise ansteuern (LED an aus)
Port A und C lässt sich nur PORTweise ansteuern (entweder alle an oder 
aus).


Was weiß ich:

Der Quarz (20MHz) wurde ja über die Fuses beim Laden des Bootloaders 
definiert.
Mein Programm ist ein simpler Blinkcode.

Meine Init()
DDRA = 0b11111111 // Alle Pins am Port A sind Ausgänge

der Rest ist Pin an -> delay -> Pin aus


Wo sage ich dem uC, dass die Pins am PortA nicht als ADCs genutz werden 
sondern als Digital IO´s?

Am port B und D kann ich alles Pins wunderbar ansteuern. Machen ich das 
gleiche mit A und C leuchtet nichts.

Irgendjmd. einen Tipp?

Viele Dank

von spess53 (Gast)


Lesenswert?

Hi

>Wo sage ich dem uC, dass die Pins am PortA nicht als ADCs genutz werden
>sondern als Digital IO´s?

Solange der ADC nicht aktiviert ist sind alle Pins normale IOs. Und bei 
aktiviertem ADC ist auch nur ein Pin mit dem ADC verbunden.

>Am port B und D kann ich alles Pins wunderbar ansteuern. Machen ich das
>gleiche mit A und C leuchtet nichts.

Sicher, das das JTAG-Interface abgeschaltet ist. Das würde 4 Pins vom 
PortC blockieren.

MfG Spess

von Bernd H. (masterz)


Lesenswert?

Hallo Spess,

auch wenn der JTAG aktiviert ist (checke ich mal heute Abend), würde 
dass mir immernoch nicht erklären, wieso der PORTA (der eigentliche Port 
an dem ich etwas ausgeben will) nicht Pinweise angesteuert werden kann?

Viele Grüße

von spess53 (Gast)


Lesenswert?

Hi

>auch wenn der JTAG aktiviert ist (checke ich mal heute Abend), würde
>dass mir immernoch nicht erklären, wieso der PORTA (der eigentliche Port
>an dem ich etwas ausgeben will) nicht Pinweise angesteuert werden kann?

Dann machst du irgendwas falsch.

MfG spess

von Thomas E. (thomase)


Lesenswert?

AVcc angechlossen?

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Was aus deinem Eröffnungsposting für mich nicht so recht hervor geht:

Hast du die Platine selbst gebaut?

Wenn ja, dann überprüf noch mal, ob an AVcc auch die Versorgungsspannung 
anliegt. Das ist der Eingang, der den Port A (dort wo der ADC sitzt) mit 
Strom versorgt. Hast du dort nichts -> Port A funktioniert nicht 
richtig.

Ansonsten:
beschreib nicht deinen Aufbau, sondern zeig ihn.
Schaltplan, ev. Bild vom Aufbau, Programmcode.

: Bearbeitet durch User
von Bernd H. (masterz)


Lesenswert?

Hallo und danke für eure Antworten.

Schaltplan ist der der AVR Grundbeschaltung. Ich habe das ganze auf ein 
Steckbrett zusammengeschaltet. AVCC ist angeschlissen AREF ist auf VCC = 
5V gezogen. Ihr habt recht, ich zieh das mal sauber in Eagle auf dann 
wird´s klarer. Aber da dass der Start meines Projektes ist, beschränkt 
es sich alles auf die Grundbeschaltung der AVRs.

Aber ich versuch mehr Infos zu posten.

Viele Grüße

von Thomas E. (thomase)


Lesenswert?

Bernd Hubert schrieb:
> Hallo und danke für eure Antworten.
>
> Schaltplan ist der der AVR Grundbeschaltung. Ich habe das ganze auf ein
> Steckbrett zusammengeschaltet. AVCC ist angeschlissen AREF ist auf VCC =
> 5V gezogen. Ihr habt recht, ich zieh das mal sauber in Eagle auf dann
> wird´s klarer. Aber da dass der Start meines Projektes ist, beschränkt
> es sich alles auf die Grundbeschaltung der AVRs.
>
> Aber ich versuch mehr Infos zu posten.
>
> Viele Grüße

AREF gehört über 100nF gegen GND und nicht auf Vcc.

mfg.

von Bernd H. (masterz)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Im Anhang seht Ihr meine Beschltung.

Mit nachfolgendem Quellcode Blinkt immernoch die LED aus PA0.
PB0 bleibt aus. Das ist mein gesamter Code den ich in die Arduino 
Console eintippe. Ist da schon etwas falsch?

AREF ist über 100nF auf GND geschaltet.
Ist noch etwas zu beachten? Kann es sein dass im Bootloader etwas 
vordefiniert wurde?
1
void setup(){
2
  // PC0 als Output
3
  //DDRA = 0x01;
4
  pinMode(PA0, OUTPUT);
5
  pinMode(PB0, OUTPUT);
6
}
7
8
void loop(){       
9
        digitalWrite(PA0, HIGH);
10
        digitalWrite(PB0, HIGH);
11
        delay(100);
12
        
13
        digitalWrite(PA0, LOW);
14
        digitalWrite(PB0, LOW);
15
        // PC0 löschen
16
        // PORTA &= ~(1<<PA0);
17
        delay(100);
18
}

Viele Grüße

von Markus (Gast)


Lesenswert?

Schreib mal anstelle von "PB0" "0".
Also:
pinMode(0, OUTPUT);
und
digitalWrite(0, HIGH);

http://www.hobbytronics.co.uk/atmega644-arduino

von Bernd H. (masterz)


Lesenswert?

Hallo Markus,

vielen vielen Dank!

Das war der Fehler.. Die Ports sind von 0 .. 31 durchnummeriert! Nicht 
nach PA PB PC PD.

Jetzt läufts!

Viele Grüße

von Markus (Gast)


Lesenswert?

Bernd Hubert schrieb:
> vielen vielen Dank!
>
> Das war der Fehler.. Die Ports sind von 0 .. 31 durchnummeriert! Nicht
> nach PA PB PC PD.
>
> Jetzt läufts!

Bitte.

Ja, das ist "der Preis" mit den Arduino-Funktionen. Die verwenden leider 
ihre eigene Bezeichnung.
Das kann manchmal ganz schön verwirrend sein.

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.