mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtmelISP, AT89S52


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
/*-----------------------------------------------------------------------------
Definitions for P1 (8 bits), P1.0, and P1.1.
-----------------------------------------------------------------------------*/
sfr P1 = 0x90;        /* SFR for P1 */

sbit P1_0 = P1^0;     /* SFR for P1.0 */
sbit P1_1 = P1^1;     /* SFR for P1.1 */

/*-----------------------------------------------------------------------------
MAIN C function
-----------------------------------------------------------------------------*/
void main (void)
{
P1_0 = 1;                  /* Configure P1.0 as an input */

/*-----------------------------------------------
This loop reads P1.0 and writes the value read
to P1.1.

Open the Port 1 Dialog from the Peripherals Menu
and change the value of the P1.0 Pin.  When you
set P1.0 LO, P1.1 outputs LO.  When you set 
P1.0 HI, P1.1 outputs HI.
-----------------------------------------------*/
while (1)
  {
  P1_1 = P1_0;            /* Copy P1.0 to P1.1 */
  }
}

/*-----------------------------------------------------------------------------
-----------------------------------------------------------------------------*/

(Ist ein Beispielcode von Keil)


Weiß jemand Rat?

Grüße Alex

Autor: M. H. (doktorgnadenlos)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls nötig hier noch der HEX-Code:

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

Grüße

Autor: Matthias (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Grüße Alex

Autor: Matthias (Gast)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: E. B. (roquema) Benutzerseite
Datum:

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

Autor: Alex (Gast)
Datum:

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

void main (void) {
  P1 = 0xFF;             

  while (1) {
      P1 |= 0xFF;          
  }
}

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

Autor: Thomas B. (detritus)
Datum:

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

Autor: M. H. (doktorgnadenlos)
Datum:

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

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDR gibts nicht bei 51ern.

Autor: Alex (Gast)
Datum:

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

Gruß

Autor: Thomas B. (detritus)
Datum:

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

Autor: Alex (Gast)
Datum:

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

void main (void) {
  P0 = 0xFF; 
  P1 = 0xFF;   
  P2 = 0xFF;
  P3 = 0xFF;          

  while (1) {
      P0 |= 0x00;   
      P1 |= 0x00; 
      P2 |= 0x00; 
      P3 |= 0x00;        
  }
}

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

Autor: Thomas B. (detritus)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Ralf (Gast)
Datum:

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

Autor: Thomas B. (detritus)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: Thomas B. (detritus)
Datum:

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

Autor: Alex (Gast)
Datum:

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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ulrich Bangert, AVR-ISP.

Autor: Thomas B. (detritus)
Datum:

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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.

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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jack,
Das Programm habe ich, ich suche nur noch eine Schaltung :-)

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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

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

Autor: Alex (Gast)
Datum:

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

Autor: Max (Gast)
Datum:

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

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.