mikrocontroller.net

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


Autor: alfons (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <ds89c4xx.h>
#include <stdio.h>


void serialInit() {
  TMOD = 0x21; // Timer 1: 8-bit autoreload from TH1
  TH1 = 0xf5; // 9600 baud rate at 20mhz
  CKMOD = 0x38; // Use system clock for timer inputs
  T2CON = 0x00; // Serial 0 runs off timer 1 overflow
  TCON = 0x50; // Enable timers 0 and 1
  SCON0 = 0x50; // Enable serial port 0
  SBUF0 = ' ';
}

void main() {
  serialInit(); // Initialize serial port 0
  printf("\rHello from the Keil C51 compiler\r");
  while (1) {
    ; // Endless loop
  }
}
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...

Autor: G. O. (aminox86)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: alfons (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja natürlich, wie gesagt, er lässt sich ja auch Flashen...
DS89C430 LOADER VERSION 2.1  COPYRIGHT (C) 2002 DALLAS SEMICONDUCTOR
> Loading File D:\Dokumente und Einstellungen\bazi\Desktop\89c430test\test.hex

Erasing Flash   ==> Completed

Loading Hex file... 

.......

Load complete.

> 

Autor: alfons (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: G. O. (aminox86)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: alfons (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: alfons (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: G. O. (aminox86)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernhard Spitzer (b_spitzer)
Datum:

Bewertung
0 lesenswert
nicht 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

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.