Forum: Mikrocontroller und Digitale Elektronik AT89C51ED2 Ports funktionieren nicht


von Alex O. (alex_92)


Lesenswert?

Hallo,

nach langem Versuchen und Recherchieren muss ich wohl um Hilfe bitten.

Problemdefinition:
Versuche einen AT89C51ED2 (PLCC68-Gehäuse) anzusteuern.
Aber es klappt nicht so, wie ich es mir vorstelle.

Ich verwende Keil µVision 4 zum Programmieren und Flip 3.4.7 zum 
Flaschen.
Ich kann die .HEX erstellen, mit Flip eine Verbindung aufbauen und 
anscheinend erfolgreich flaschen.

Aber der IC tut nichts.

Testcode:
1
#define MICROCONTROLLER_T89C51ED2
2
#include <mcs51reg.h>
3
4
void main(void)
5
{
6
    while(1) 
7
  {
8
    P0 = 0xAA;
9
    P1 = 0xAA;
10
    P2 = 0xAA;
11
    P3 = 0xAA;
12
    P4 = 0xAA;
13
    P5 = 0xAA;
14
  }
15
}

Selbst dieser simple code funktioniert nicht.

Beim Versuch mit einer LED, bleibt diese an allen Pins aller Porte aus.
Direkt an VCC leuchtet sie aber.

VCC liegt bei ~4,95V.

Wisst ihr Rat oder irgendwelche Dinge, die ich noch testen könnte?

von Matthias (Gast)


Lesenswert?

Wie hast du das BLJB bit programmiert?
Wie ist der EA Pin beschalten?

von Ralf (Gast)


Lesenswert?

> Direkt an VCC leuchtet sie aber.
Der ED2 hat wie die meisten 8051 Controller keine aktiven 
High-Ausgangstreiber, daher werden LEDs, etc. lowaktiv angesteuert.

Ralf

von Alex O. (alex_92)


Angehängte Dateien:

Lesenswert?

Leider weiß ich nichts über das BLJB bit.

Die Beschaltung ist wie im Anhang.

Und was lowaktiv betrifft, ich habe extra den Wert 0xAA gewählt, damit 
die eine Hälfte an und die Andere aus ist.

Aber egal wie ich die LED pole, die leuchtet einfach nicht, als ob der 
µC komplett sperrt.

Also ich schon folgendes getestet:
LED-GND an Port & LED-VCC an VCC -> leuchtet nicht
LED-GND an GND & LED-VCC an Port -> leuchtet nicht
sogar
LED-GND an VCC & LED-VCC an Port -> leuchtet nicht
LED-GND an Port & LED-VCC an GND -> leuchtet nicht

Aber tut sich nichts.

von Wilhelm F. (Gast)


Lesenswert?

Die Reset-Schaltung scheint etwas merkwürdig zu sein. Wo kommt denn dort 
ein Massepotential her? Ich kenne sie aber eher nur vom Standard-8051.

von Alex O. (alex_92)


Lesenswert?

Ich habe mal versucht da noch einen 47K Widerstand auf masse zu legen, 
ohne dass sich etwas geändert hat.

Warum kein Massepotenzial anliegt kann ich auch nicht sagen.
Die Schaltung ist mehr oder weniger nachgebaut.
beim googeln nach "HW_Doku_AT89C51ED2-Testboard.pdf" solltet ihr fündig 
werden.

von Wilhelm F. (Gast)


Lesenswert?

Alexander O. schrieb:

> Warum kein Massepotenzial anliegt kann ich auch nicht sagen.
> Die Schaltung ist mehr oder weniger nachgebaut.

Trotzdem sollte man dann jederzeit darüber in Kenntnis sein, was in der 
Schaltung passiert.

Dann schau mal ins Datenblatt, wie der Reset-Pegel sein sollte, ob das 
mit der Schaltung überein stimmt. Denn normalerweise liegt am Reset ein 
zeitbestimmendes RC-Glied zwischen VCC und GND. Es sei denn, der 
Reset-Pin hat intern irgendwo eine Masse, z.B. über Pulldown-Widerstand. 
Das erscheint mir aber ungewöhnlich.

von Wilhelm F. (Gast)


Lesenswert?

Alexander O. schrieb:

> beim googeln nach "HW_Doku_AT89C51ED2-Testboard.pdf" solltet ihr fündig
> werden.

Ja, OK. Der Reset wird wohl über DTR von der RS232 gesteuert. Das geht 
ja aus dem Schaltbildanhang nicht hervor.

Ob beim Flash-Download über Keil aber DTR angesteuert wird, und wie DTR 
im Ruhezustand ist, ist eine neue Frage. Vielleicht braucht man da noch 
was anderes als die Keil-Umgebung.

von Matthias (Gast)


Lesenswert?

Alexander O. schrieb:
> Leider weiß ich nichts über das BLJB bit.
>
> Die Beschaltung ist wie im Anhang.

Du hast doch mit FLIP programmiert. Das ist eine Einstellung in FLIP. 
Wenn das BLJB falsch gesetzt ist läuft deine Applikation nicht an.
Ich glaube das BSB auf 0x01 und SBV auf 0x00 zu setzen sollte ausreichen 
um vom on-chip Flash von Adresse 0 loszulaufen.

von Alex O. (alex_92)


Lesenswert?

Nach langem testen scheint es zu funktionieren.
Bei dem Schaltplan wird der Programmmodus durch einen DIP-Schalter 
betätigt.
Ich habe diesen bei vielen Tests vergessen umzulegen bzw. zu trennen.
Jedoch hatte ich auch bereits Tests am DIP-Schalter getätigt, ohne 
vorherigen Erfolg.

Im Moment funktioniert es, wenn ich diese umlegen und dann den Reset 
drücke.

Aber ich hatte bisher auch viel herumexperimentiert, deswegen weiß ich 
nicht genau, ob es nur an diesem Schalter lag.

Ich werde noch ein wenig testen müssen.

Was die anderen Vorschläge betrifft:
Das setzen des BLJB schien nach dem Reset keinen unterschied zu machen.
Auch der Widerstand am Reset zum GND hatte nichts geändert.

von Wilhelm F. (Gast)


Lesenswert?

Alexander O. schrieb:

> Im Moment funktioniert es, wenn ich diese umlegen und dann den Reset
> drücke.

Es sieht mir fast so aus, als ob mit dem DIP-Schalter zwischen echtem 
Betrieb an der RS232 und autonomem Betrieb umgeschaltet wird.

Viele Flash-Tools verwenden an der RS232 das DTR-Signal zum Reset.

Aber, wenns denn jetzt geht...

von Matthias (Gast)


Lesenswert?

Dein DIP Switch wird vermutlich PSEN gegen Masse ziehen.

von Wilhelm F. (Gast)


Lesenswert?

Matthias schrieb:

> Dein DIP Switch wird vermutlich PSEN gegen Masse ziehen.

LOL

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.