Forum: Mikrocontroller und Digitale Elektronik Bekomme DS89C430 nicht richtig zum Laufen.


von alfons (Gast)


Lesenswert?

Hi Leute,

ich habe hier einen DS89C430 DIP auf meinem Steckbrett mit Max232 und 
versuche nun den Controller zu Programmieren. Das Testprogramm, habe ich 
mit der Keil Demoversion geschrieben, hier der Code:
1
#include <ds89c4xx.h>
2
#include <stdio.h>
3
4
5
void serialInit() {
6
  TMOD = 0x21; // Timer 1: 8-bit autoreload from TH1
7
  TH1 = 0xf5; // 9600 baud rate at 20mhz
8
  CKMOD = 0x38; // Use system clock for timer inputs
9
  T2CON = 0x00; // Serial 0 runs off timer 1 overflow
10
  TCON = 0x50; // Enable timers 0 and 1
11
  SCON0 = 0x50; // Enable serial port 0
12
  SBUF0 = ' ';
13
}
14
15
void main() {
16
  serialInit(); // Initialize serial port 0
17
  printf("\rHello from the Keil C51 compiler\r");
18
  while (1) {
19
    ; // Endless loop
20
  }
21
}
Der Controller läuft bei 20Mhz, die Baudrateneinstellung müsste so 
stimmen.
Ein anderes Testprogramm, welches einfach nur eine LED am Port 1.0 ein / 
ausschalten sollte, funktionierte ebenso nicht.

Im Datenblatt steht, man muss zuerst den PSEN Pin floaten lassen, dann 
Reset. Ich ziehe also das Kabel vom PSEN und danach vom Reset, tut sich 
aber nichts. Auch wenn ich dann versuche einen Reset auszuführen indem 
ich die Resetleitung auf Plus lege und wieder wegnehme, tut sich auch 
nichts...

Flashen lässt sich der Chip ohne Probleme über das MTK von Dallas/Maxim.

Der Hardwareaufbau:
20mhz Quarz, Max232<->RS232 vom Controller,
zum Flashen: RST = 1, PSEN = 0, EA = 0

Ich hoffe, jemand von euch kann mir weiterhelen...

von G. O. (aminox86)


Lesenswert?

Meldet sich der Controller bzw der Bootloader denn mit seinem Prompt im 
MTK?
In etwa "Dallas DS89C430... usw.
Sollte beim Betätigen der Leertaste im MTK passieren.
mfg

von alfons (Gast)


Lesenswert?

Ja natürlich, wie gesagt, er lässt sich ja auch Flashen...
1
DS89C430 LOADER VERSION 2.1  COPYRIGHT (C) 2002 DALLAS SEMICONDUCTOR
2
> Loading File D:\Dokumente und Einstellungen\bazi\Desktop\89c430test\test.hex
3
4
Erasing Flash   ==> Completed
5
6
Loading Hex file... 
7
8
.......
9
10
Load complete.
11
12
>

von alfons (Gast)


Angehängte Dateien:

Lesenswert?

Hmmmm jetzt scheints zu funktionieren. In der letztendlichen Schaltung 
wollte ich einen 7404 statt dem 74125 wie im Datenblatt verwenden, habs 
mal ausprobiert aufm Steckbrett und funzt :)

siehe Anhang

von G. O. (aminox86)


Lesenswert?

Na gut.
Lädt MTK das Programm in den Programmbereich des Prozessors?
Ist der EA-Pin auf '1', wenn zB. das (Blink)Programm nach dem 
Ladevorgang starten soll?
Im Datenblatt des Controllers ist zu sehen, dass Dallas einen 74X125 zur 
Steuerung des Bootloaders einsetzt; er ist mit den entsprechenden 
Portpins des Controllers verbunden und wird vom DTR-Signal des 
Programmierrechners aktiviert (diese Funktion im MTK anwählen). Falls 
dieser Baustein nicht zur Verfügung steht, bietet es sich an, die 
Port-Pins des Controllers mit Einzeltransistoren in 
Open-Collector-Konfiguration (oder hochohmigen Kollektorwiderständen) zu 
beschalten, Ansteuerung der Transistoren wie oben.
Zuletzt muß natürlich sichergestellt seim, das der Linker der 
Keil-Entwicklungsumgebung zumindest den Start-Up-Code des 
Anwendungsprogramms an Adresse 0x0000 im Programmspeicher des 
Controllers ablegt.

von alfons (Gast)


Lesenswert?

Na ich habe den 7404 verwendet, da ich den 125er nicht habe, 
funktioniert. EA ist auf 1.

Von Hand hats irgendwie nicht funktioniert, mit dem Inverter-IC schon, 
ist ja gut so :)

von alfons (Gast)


Angehängte Dateien:

Lesenswert?

Noch etwas, da Du ja anscheinend Ahnung vom Controller hast :)

Im Einstellungsfeld BL51Locate, wie im Anhang zu sehen, was muss ich da 
Eintragen? In der Appnote "Using the Keil C Compiler" von Dallas/Maxim 
steht dazu nichts...

Hier die Appnote http://www.maxim-ic.com/app-notes/index.mvp/id/3267
Im Anhang ein Screenshot.

von G. O. (aminox86)


Lesenswert?

Kunststück, ich bastele gerade an einem autonomen Rasenmäher, dessen 
Hirn ein DS89C450@40MHz ist.
Glückwunsch!
Vielleicht noch eine Anmerkung zum '125 bzw zur von mir vorgeschlagenen 
Beschaltung. Beide haben gemeinsam, dass sie im inaktiven Zustand 
'schwache' Pegel an die Pins des Controllers legen. Damit besteht die 
Möglichkeit, diese während des Programmlaufs durch 'harte' Signale aus 
anderen Schaltungsteilen zu überschreiben und den Programmablauf zu 
beeinflussen. Vorteil der Anordnung ist, dass ohne 
Hardwareänderung(Jumper umstecken, Stecker abziehen usw.) vom 
Programmieren direkt in den Betrieb und zurück gewechselt werden kann.

Nun zur Frage, die ich allerdings nur bedingt und relativ allgemein 
beantworten kann, da ich nicht mit der Keil-Umgebung und nicht unter 
Windows mit 8051-Prozessoren arbeite(im Fall des Dallas-Prozessors habe 
ich mir ein etwas rustikales MTK für DOS geschrieben, so dass ich meinen 
alten DOS-Compiler, der selbstverständlich auf einem lupenreinen 
DOS-Rechner läuft, verwenden kann).

Die Linkereinstellung, besser Linker-Locater-Einstellungen, brauchen 
fürs erste nicht geändert werden. Der Programmcode wird nach Adresse 
0x0000 gelinkt. Den Konstanten- und Variablensegmenten(IDATA, DATA, 
XDATA), mit denen der Compiler arbeitet, in dieser Phase schon 
Startadressen zuzuweisen, scheint mir nicht sinnvoll zu sein, da der 
Compiler den Überblick hat. Außerdem bietet das MTK ähnliche 
Möglichkeiten.

Die Abbildung der Grundeinstellungen in besagter AppNote zeigt die 
verschiedenen Möglichkeiten auf, das Speichermodell für eine spezielle 
Anwendung zu wählen. Für den von Dir verwendeten Prozessor, ohne 
externen Daten- oder Programmspeicher kommt nur ein kleines 
Speichermodell in Frage, also SMALL oä, bei dem der interne Ram(IDATA?) 
und der interne Flash(CODE) verwendet werden. Der auf dem Chip vorhanden 
Ram(XDATA) kann sowieso erst zur Laufzeit aktiviert werden und dann ist 
hoffentlich klar, was mit dem Speicherzuwachs getan werden soll. Die 
Option 'double DPTR' kann aktiviert werden(wenn's nichts nützt, so 
schad's doch nichts).
mfg

von Bernhard S. (b_spitzer)


Lesenswert?

>   SCON0 = 0x50; // Enable serial port 0

>  printf("\rHello from the Keil C51 compiler\r");

Zumindest beim Raisonance-Compiler erwartet printf() bzw. putch() ein 
gesetztes TI-Flag. Putch() prüft vor dem Versenden, ob die Schnittstelle 
frei ist und wartet daher bei Dir ewig. Setzte SCON0 mal auf 0x52...

tschuessle
Bernhard

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.