Forum: Mikrocontroller und Digitale Elektronik AtmelISP, AT89S52


von Alex (Gast)


Lesenswert?

Hallo,

ich versuche gerade, mit U. Bangerts Programm AtmelISP (Aktuelle Version 
vom 21.5.2005) den AT89S52 zu programmieren. Beim Laden einer 
(minimalen) Datei erhalte ich jedoch die Meldung "The Hexfile you are 
going to load contains addresses beyond the buffer capacity...", obwohl 
die Datei passen müsste.

Beim Versuch, den Buffer zu editieren, kommt die Meldung "Invalid 
SelStart". Wähle ich zum Laden eine anderes Device und wähle danach den 
89S52, dann lässt er sich programmieren, aber das kann ja nicht im Sinne 
des Erfinders sein.

Code:
1
/*-----------------------------------------------------------------------------
2
Definitions for P1 (8 bits), P1.0, and P1.1.
3
-----------------------------------------------------------------------------*/
4
sfr P1 = 0x90;        /* SFR for P1 */
5
6
sbit P1_0 = P1^0;     /* SFR for P1.0 */
7
sbit P1_1 = P1^1;     /* SFR for P1.1 */
8
9
/*-----------------------------------------------------------------------------
10
MAIN C function
11
-----------------------------------------------------------------------------*/
12
void main (void)
13
{
14
P1_0 = 1;                  /* Configure P1.0 as an input */
15
16
/*-----------------------------------------------
17
This loop reads P1.0 and writes the value read
18
to P1.1.
19
20
Open the Port 1 Dialog from the Peripherals Menu
21
and change the value of the P1.0 Pin.  When you
22
set P1.0 LO, P1.1 outputs LO.  When you set 
23
P1.0 HI, P1.1 outputs HI.
24
-----------------------------------------------*/
25
while (1)
26
  {
27
  P1_1 = P1_0;            /* Copy P1.0 to P1.1 */
28
  }
29
}
30
31
/*-----------------------------------------------------------------------------
32
-----------------------------------------------------------------------------*/

(Ist ein Beispielcode von Keil)


Weiß jemand Rat?

Grüße Alex

von M. H. (doktorgnadenlos)


Lesenswert?

Schau Dir mal das HEX-File mit einem beliebigen Editor an. Dort kannst 
Du sehen, wohin der Linker den Code im Speicher plaziert hat. Im 
Datenblatt des Controllers findest du den Programmspeicherbereich. Das 
muss natürlich zusammenpassen.

Wie das HEX-File aufgebaut ist, findest Du z.B. unter

http://www.schulz-koengen.de/biblio/intelhex.htm

von Matthias (Gast)


Lesenswert?

Welche Keil-Version (Demo)?
Auf Weche Adresse hast Du das Programm gelinkt? Sieht danach aus, als 
willst Du das Programm in einen Bereich laden, wo der AT89S52 gar keinen 
FLASH hat.

von Alex (Gast)


Lesenswert?

Ja habs mit dem Demo von Keil compiliert.
Wo kann ich das einstellen, auf welche Adresse ich das Programm gelinkt 
haben möchte?
Muss ich das schon in Keil einstellen, bevor ich compilier?
In AtmelISP hab ich nämlich nichts gefunden, wo ich einstellen könnte, 
wohin das Programm geladen wird.

Grüße Alex

von Alex (Gast)


Lesenswert?

Falls nötig hier noch der HEX-Code:

:08080C00D290A290929180FAB3
:03000000020800F3
:0C080000787FE4F6D8FD75810702080C33
:00000001FF

Grüße

von Matthias (Gast)


Lesenswert?

Also der Hex-Code sieht ok aus. Dein Programm wird ab Adresse 0800H 
geladen. Das ist ok, weil die Demoversion von Keil einen 2KByte Offset 
generiert. Auf Adresse 0000H (Startvector) steht auch der richtige 
Einsprungpunkt. An Keil sollte es nicht liegen.

von Alex (Gast)


Lesenswert?

Hmm..
Habe immer noch das selbe Problem.
Lösungsvorschläge sind erwünscht. :-)

Grüße Alex

von Matthias (Gast)


Lesenswert?

>(Aktuelle Version vom 21.5.2005)

Ein aktuelleres Tool zum programmieren wäre empfehlenswert, z.B.:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html
ist sehr schnell und einfach zu bedienen, läuft auch unter Vista

von Alex (Gast)


Lesenswert?

Danke,
So nun brauch ich nur noch einen Freeware C Compiler für den AT89S52.
Weiß jemand ob bzw. wo es sowas gibt?

Grüße

von Matthias (Gast)


Lesenswert?

Hab mal für Dich gegoogelt. Es gibt eine aktuellere Version (22.06.2006) 
vom Bangert ATMELISP, siehe:
http://www.ulrich-bangert.de/html/downloads.html

Damit kann ich zumindest Deinen HEX-Code ohne Probleme laden und 
editieren.

Freeware C-Compiler für 8051 gibt es auch, google mal selber nach SDCC.

von E. B. (roquema) Benutzerseite


Lesenswert?

SDCC als Compiler und z.B. MIDE als grafische Umgebung/Editor.
http://www.opcube.com/home.html

von Alex (Gast)


Lesenswert?

Dane,
So habe MIDE heruntergeladen.
Compilen, downloaden klappt alles super, aber ...

Folgendes problem:
Ich will ein ganzen Port auf ein setzen, nur es passiert nichts.

Programmcode:
1
#include <at89x52.h>
2
3
void main (void) {
4
  P1 = 0xFF;             
5
6
  while (1) {
7
      P1 |= 0xFF;          
8
  }
9
}

Hex-Code:
:03000000020003F8
:03005C0002005F40
:05005F0012006480FEA8
:030064007590FF95
:07006700E5907590FF80F9A0
:06003200E478FFF6D8FDA2
:080010007900E94400601B7A4D
:05001800009000727869
:03001D000075A0CB
:0A00200000E493F2A308B800020503
:08002A00A0D9F4DAF275A0FF81
:080038007800E84400600A7939
:030040000075A0A8
:0600430000E4F309D8FC03
:080049007800E84400600C7926
:0B00510000900000E4F0A3D8FCD9FAF6
:03000300758107FD
:0A00060012006EE582600302005F45
:04006E007582002275
:00000001FF


Ich bin mir auch nicht sicher, ob das HEX-File richtig in den 
Mikroconroller geladen wird. Wenn ich, nachdem ich das HEX-File 
downgeloadet habe, Read Code Memory to Buffer anwähle, stehen im Buffer 
nur F's, was aber nicht meinem HEX-Code entspricht.

Bitte um Hilfe.

Grüße Alex

von Thomas B. (detritus)


Lesenswert?

> Folgendes problem:
> Ich will ein ganzen Port auf ein setzen, nur es passiert nichts.
>



Was heisst für dich "Port ein" ? LED angeschlossen, wenn ja, wie?

von M. H. (doktorgnadenlos)


Lesenswert?

Ich kenne zwar den at89x52 nicht, vermute aber stark, dass Du den 
Portpin als Ausgang konfigurieren musst.

DDR1 = 0xFF;

oder so ähnlich, je nachdem wie das Register genannt wird.

von Thomas B. (detritus)


Lesenswert?

DDR gibts nicht bei 51ern.

von Alex (Gast)


Lesenswert?

Ups,
Wollte 1 sagen.
Nein zur Zeit heb ich keine LED's angeschlossen. Ich messe die TTL Pegel 
mit einem Multimeter.

Gruß

von Thomas B. (detritus)


Lesenswert?

Schalte sie mal probeweise nicht auf 0xFF, sondern auf 0x00.
Dann solltest du nach dem Reset sowas in der Gegend von 0V am Pin 
messen. (die pins gehen defaultmässig auf 1)

Ansonsten: welche Programmierhardware?

von Alex (Gast)


Lesenswert?

Jo mach ich. Ich verwende ATMEL ISP.

Ich beschreibe mal kurz meine Vorgangsweise:

Ich compiliere den c Code mit dem SDCC Compiler (Als grafische Umgebung 
verwende ich MIDE).

C-Code:
1
#include <at89x52.h>
2
3
void main (void) {
4
  P0 = 0xFF; 
5
  P1 = 0xFF;   
6
  P2 = 0xFF;
7
  P3 = 0xFF;          
8
9
  while (1) {
10
      P0 |= 0x00;   
11
      P1 |= 0x00; 
12
      P2 |= 0x00; 
13
      P3 |= 0x00;        
14
  }
15
}

Nun habe ich das Hex-File.

Ich lade nun das Hex-File in den Buffer (Buffer -> Load from Disk -> As 
a Intel HEX File). Danach überprüff ich ob alles ordnngsgemäß in den 
Buffer geladen wurde (Buffer -> Edit). Wenn alles passt, lad ich nun den 
ganzen Kram in den Speicher des Mikrocontrollers (Device -> Write Buffer 
to Code Memory). Danach öffne ich das Terminal um das Programm zu 
starten (Terminal). Nur passiert nichts.

Grüße Alex

von Thomas B. (detritus)


Lesenswert?

Mit dem Terminal kannst du über UART mit deinem Controller 
kommunizieren, das hat mit dem Programmieren erstmal nix zu tun.

Bei Device->Verify Code-Memory kriegst du immer noch nen Fehler und der 
Bufferinhalt entspricht nicht deinem hex-file, oder?

Dann nochmal: Welche Programmierhardware (Board, Anschluss, 
evtl.Schaltplan) und wie ist der ATMELISP denn eingestellt(Parameters) ?

von Alex (Gast)


Lesenswert?

Parameter:
http://www.imgwelt.de/show.php?code=41488P5V243

Bei meinem AT89S52 ist esg gar nicht möglich "Read Code Memory to 
Buffer" auszführen.
Zitat: "Simply choose the second entry if the <Device> menu, as shown 
above. Note that this option is only available if the current device is 
an AT89S8252 or an AT89S8253."
Also denke ich auch, dass es nicht möglich ist "Verify Code Memory 
auszuführen. Oder doch?

Wie starte ich dann das ganze Programm?

Ich verwende die STK500 zum prgrammieren.

von Ralf (Gast)


Lesenswert?

> P0 |= 0x00;
> P1 |= 0x00;
> P2 |= 0x00;
> P3 |= 0x00;

Das bringt nix, weil verodern mit 0 den Wert nicht ändert. Wie wärs mit 
P0++ o.ä. dann siehst du was am Port zucken. Ist nur so ne Idee.

Ralf

von Thomas B. (detritus)


Lesenswert?

Alex wrote:
> Parameter:
> http://www.imgwelt.de/show.php?code=41488P5V243
>
> Bei meinem AT89S52 ist esg gar nicht möglich "Read Code Memory to
> Buffer" auszführen.
> Zitat: "Simply choose the second entry if the <Device> menu, as shown
> above. Note that this option is only available if the current device is
> an AT89S8252 or an AT89S8253."
> Also denke ich auch, dass es nicht möglich ist "Verify Code Memory
> auszuführen. Oder doch?
>
autsch... ich hab nen 8253 und daher nie sonderlich drauf geachtet ;)
>

> Ich verwende die STK500 zum prgrammieren.

Das STK500 tut nur für AVR-µC, für deinen '51 brauchst du ne andere 
Schaltung (Google fragen).

von Alex (Gast)


Lesenswert?

Also mir wurde gesagt, es müsse mit der STK500 auch gehen.
Die Pins RESET, MOSI, SCL, MISO vom Prozessor sind ja an der richitgen 
Stelle.
Atmel ISP lädt das Programm ja ohne Probleme rüber.

P.S. Wie start ich das Programm denn, wenn nicht mit dem Terminal...

Grüße

von Thomas B. (detritus)


Lesenswert?

Alex wrote:
> Also mir wurde gesagt, es müsse mit der STK500 auch gehen.
> Die Pins RESET, MOSI, SCL, MISO vom Prozessor sind ja an der richitgen
> Stelle.

Dann frag mal nach, wie das genau gehen soll- mir ist da nix bekannt.

> Atmel ISP lädt das Programm ja ohne Probleme rüber.

Steck mal das serielle Kabel vom stk ab und mach dann noch nen 
Programmierversuch... ;)



> P.S. Wie start ich das Programm denn, wenn nicht mit dem Terminal...


Naja, sobald der Reset nach dem Proggen weg ist, läuft das Ding los.

von Alex (Gast)


Lesenswert?

Ouch, ok .. es geht ned mit der STK500 :-(.

Hast du zufällig ne Schaltung parat, mit der ich den AT89S52 ISP Progen 
kann. Oder gibts da auch was zum kaufen?

von jack (Gast)


Lesenswert?

Ulrich Bangert, AVR-ISP.

von Thomas B. (detritus)


Lesenswert?

Sorry, hab keine Schaltung da. Wirf mal Google an, da müsste schon was 
Einfaches, Steckbretttaugliches zu finden sein.

von jack (Gast)


Lesenswert?

P.S.

AVR-ISP ist falsch, das Tool heißt ATMELISP.

von Alex (Gast)


Lesenswert?

jack,
Das Programm habe ich, ich suche nur noch eine Schaltung :-)

von jack (Gast)


Lesenswert?


von Max (Gast)


Angehängte Dateien:

Lesenswert?

@jack
die Schaltung ist nicht AtmelISP-kompatibel.

Die der Anlage ist für AtmelISP, wobei man den Treiber und die 
Beschaltung noch stark vereinfachen kann.

Ansonsten ist hier ein einfacher Programmer:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html

von Alex (Gast)


Lesenswert?

Danke,
Hätte ansonsten auch noch was gefunden...
http://www.sixca.com/eng/articles/at89s_isp/

von Max (Gast)


Lesenswert?

> http://www.sixca.com/eng/articles/at89s_isp/
Geht auch. Allerdings passt die LPT-Belegung nicht zur Original 
AtmelSP89 Software. (Jeder Programmer benutzt praktisch eine andere 
Belegung der LPT-Pins.)

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.