Mega programmiert Mega

  • 1
  • 2
  • Page 1 of 2
jomixl
Benutzer
Avatar
Gender:
Posts: 225
Registered: 02 / 2008
Subject:

Mega programmiert Mega

 · 
Posted: 30.06.2015 - 15:50  ·  #1
Hallo Gemeinde,
wie kann ein Mega einen Slave(Mega) programmieren?
Hat das schon mal jemand gemacht?
Wenn ja, wie groß ist der Aufwand?

Um die Produktion zu vereinfachen stelle ich mir vor einen Mega128 mit dem Programmer zu
flashen. Diese soll dann beim Programmstart nachsehen ob der Slave bereits geflasht ist und diesen
gegebenenfalls flaschen. der Slave soll ein Mega88 sein.

Danke für eure Vorschläge

Joachim
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 16:35  ·  #2
Und wo willst du das Programm (hex file) für den Atmega88 abspeichern ?
Im AtMega128 ?


Gruß Frank
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 16:39  ·  #3
Hallo Joachim,

muß gehen - der elab-Programmer mach das ja auch. Das Prog könnte im Mega128 sein oder von einer externen Datenquelle gelesen werden (SD-Karte).

Gruss
Harry
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 16:43  ·  #4
Hallo Harry, das es geht ist keine Frage, ich hatte auch mal ein Projekt wo ein kleiner
Atmega einen anderen auf dem Board (Platine) Programmiert hat.

Nur bei mir war die Datenquelle ein Delphi Programm was die hex über USB an den AtMega8
geschoben hat.

Das zu Programmieren ist nicht schlimm.


Gruß Frank
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 16:55  ·  #5
Hi,
Quote by jomixl
Um die Produktion zu vereinfachen ...

ich frage mich, ob die Geschwindigkeit eines Booloaders für die Produktion
geeignet ist. Wie lange dauert das via SPM ?
Die Programmer röteln ja ziemlich lang verglichen mit JTAG oder PDI.

Gunter
Harald_K
 
Avatar
 
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 18:48  ·  #6
also das SPI-Programmierverfahren ist ja im Datenblatt recht gut erläutert, das sollte doch zu implementieren sein.

sind auch nur die "üblichen" Pins, also MOSI, MISO, SCK, Reset, VCC, GND ...

da kann man den gleichen Stecker wie für den normalen E-Lab-Programmer nutzen, muß aber ggf. den Lappi net danebenstellen und mit der Maus rühren, sondern einfach Anstöpseln, Taste drücken, drüberbruzzeln, fertig.

Das mit dem feststellen ob schon das richtige Prog drin ist geht mit gesetzten Lockbits wohl eher nicht, lediglich der gesetzte Leseschutz wäre ein Indiz dafür daß überhaupt was im neuen Proz drinsteht. Macht aber auch nix, det Atmel verträgt ja schon so paar Programmierversuche
TheBeginner
Schreiberling
Avatar
Gender: n/a
Location: Wunsiedel Bayern
Age: 67
Posts: 766
Registered: 06 / 2013
Subject:

Re: Mega programmiert Mega

 · 
Posted: 30.06.2015 - 20:38  ·  #7
Also wenn es hilft poste ich mal was ich damals so Programmiert habe, also bei mir ging es super.



Code

procedure InitPorts;
begin
  PortC:= %00001111;
  DDRC:=  %00001110;
end InitPorts;

//------------------------------------------------------
//Reset Set
procedure Set_Reset;
begin
  Incl(At_Reset);
end Set_Reset;
//Reset Clr
procedure Clr_Reset;
begin
  Excl(At_Reset);
end Clr_Reset;

//Set SCK ----------------------------------
procedure Set_SCK;
begin
  Incl(At_SCK);
  // Delay ? einbauen ?
end Set_SCK;

//Clr SCK
procedure Clr_SCK;
begin
  Excl(At_SCK);
  // Delay ? einbauen ?
end Clr_SCK;

//Set MOSI 
procedure Set_MOSI;
begin
  Incl(At_MOSI);
end Set_MOSI;

//Clr MOSI
procedure Clr_MOSI;
begin
  Excl(At_MOSI);
end Clr_MOSI;




Das hier war erstmal das wichtigste das der Atmel Antwortet.

Code

//*****************************************
//  'P' Enable Programming
//*****************************************
procedure EnableChip;
begin
  Set_SCK;
  Clr_SCK;
  Set_Reset;
  mDelay(1);
  Clr_Reset;
  mDelay(50);
  KumByt := $AC;
  Hi_Adr := $53;
  Lo_Adr := $0;
  Data   := $0;

  Befehl_Senden;

  if wertH = 83 then
    SerOut($0D);
  else
    Write(SerOut, '?');
  ENDIF;
end EnableChip;





Und das waren halt meine Routinen zur Kom. mit dem Atmel.
Code

//*****************************************
//  Befehle an den Atmel Senden
//*****************************************
procedure Befehl_Senden;
Var stelle : byte;
begin
//byte 1 senden
  stelle := 128;
  for i:= 1 TO 8 DO
    if (KumByt AND stelle) > 0 then  Incl(At_MOSI);  else Excl(At_MOSI);   ENDIF;
    Set_SCK;
    stelle := stelle div 2;
    Clr_SCK;
  ENDFOR;

//byte 2 senden
  stelle := 128;
  for i:= 1 TO 8 DO
    if (Hi_Adr AND stelle) > 0 then  Incl(At_MOSI);  else Excl(At_MOSI);   ENDIF;
    Set_SCK;
    stelle := stelle div 2;
    Clr_SCK;
  ENDFOR;

//byte 3 senden + abholen wertH
  stelle := 128;
  for i:= 1 TO 8 DO
if (Lo_Adr AND stelle) > 0 then Incl(At_MOSI);  else Excl(At_MOSI);   ENDIF;
if At_MISO then wertH:= (wertH shl 1) or $1; else wertH:= wertH shl 1;  ENDIF;
    Set_SCK;
    stelle := stelle div 2;
    Clr_SCK;
  ENDFOR;

//byte 4 senden + abholen wertL
  stelle := 128;
  for i:= 1 TO 8 DO
if (Data AND stelle) > 0 then Incl(At_MOSI);  else Excl(At_MOSI);    ENDIF;
if At_MISO then wertL:= (wertL shl 1) or $1; else wertL:= wertL shl 1;  ENDIF;
    Set_SCK;
    stelle := stelle div 2;
    Clr_SCK;
  ENDFOR;
end Befehl_Senden;

//*****************************************
//  Atmel Nur 4te byte Lesen
//*****************************************
procedure Befehl_Lesen;
Var stelle, i : byte;
begin
//byte 1 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(KumByt, i ));
    Set_SCK;
  ENDFOR;

//byte 2 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(Hi_Adr, i ));
    Set_SCK;
  ENDFOR;

//byte 3 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(Lo_Adr, i ));
    Set_SCK;
  ENDFOR;
  Clr_SCK;

//byte 4 senden + abholen wertL
  stelle := 128;
  for i:= 1 TO 8 DO
    if At_MISO then wertL:= (wertL shl 1) or $1; else wertL:= wertL shl 1;  ENDIF;
    Incl(At_SCK);
    stelle := stelle div 2;
    Excl(At_SCK);
  ENDFOR;
end Befehl_Lesen;

//*****************************************
//  Atmel Nur 4 byte write
//*****************************************
procedure Befehl_Write;
Var i : byte;
begin
//byte 1 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(KumByt, i ));
    Set_SCK;
  ENDFOR;
  Clr_SCK;
//byte 2 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(Hi_Adr, i ));
    Set_SCK;
  ENDFOR;
  Clr_SCK;
//byte 3 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(Lo_Adr, i ));
    Set_SCK;
  ENDFOR;
  Clr_SCK;

//byte 3 senden
  for i:= 7 DownTO 0 DO
    Clr_SCK;
    SetBit( AT_MOSI, Bit(Data, i ));
    Set_SCK;
  ENDFOR;
  Clr_SCK;
end Befehl_Write;





ich hoffe es hilft ihm bissel, also mir hatte es damals geholfen.



Gruß Frank
jomixl
Benutzer
Avatar
Gender:
Posts: 225
Registered: 02 / 2008
Subject:

Re: Mega programmiert Mega

 · 
Posted: 01.07.2015 - 08:48  ·  #8
Danke für die Antworten und Codebeispiele!

Grüße Joachim
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 15 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.030437s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI