Forum: Mikrocontroller und Digitale Elektronik AtTiny85 Selbstprogrammierung


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Marius S. (fhler)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ja vor das sich ein AtTiny85 mit  über den SPI-Bus 
bereitgestellten Programmdaten selbst programmieren soll. (Datenblatt S. 
141 ff.)

Die Daten werden auch über den BUS geschickt jedoch macht der Tiny im 
Anschluss nicht was er soll (eine LED blinken lassen).  Meine 
Analysemöglichkeiten sind beschränkt da der Tiny nichts über den 
seriellen Monitor ausgeben kann.

Das Fusebit im Tiny habe ich entsprechend gesetzt damit eine 
Selbstprogrammierung überhaupt möglich ist. Ob die Spanne für alle 3 
nötigen Aktionen (fill page buffer, erease page, write page)   von 3,7 - 
4,5 ms eingehalten wird weiß ich leider nicht.  Vielleicht liegt es eben 
"einfach" am Timing. Oder ich muss erst das SPMCSR-Register Setzen bevor 
der Assembler Code folgt?

Gruß

Marius

Hier der Code der auf dem Tiny (vor der Selbstprogrammierung) läuft:

EDIT: Die Definition der Variablen müssen natürlich außerhalb der 
setup-Schleife stehen und tun dies auch.
1
void setup() {
2
  // put your setup code here, to run once:
3
  
4
char Adr_MSB = 0;
5
char Adr_LSB = 0;
6
char DataHigh = 0;
7
char DataLow = 10;
8
char ZL_Data = 0;
9
char ZH_Data = 0;
10
//int zaehler_Datenuebertragung = 0;
11
int DataLowHighzaehler = 0;
12
int Prog_EN = 0;
13
14
  //sei();
15
  SREG = (1 << 7); //Globale Interrupts aktivieren
16
  USICR = 0b01011000; //Einrichtung USI: CounterInterrupt an, 3 Wire Mode (SPI), Clock extern positive Flanke
17
}
18
19
ISR(USI_OVF_vect)
20
{
21
  if (DataLowHighzaehler == 0)
22
  {
23
    DataLow = USIBR;
24
    USISR = (1 << USIOIF); // Overflow Flag zurücksetzen
25
    DataLowHighzaehler++;
26
  }
27
  else if (  DataLowHighzaehler == 1)
28
  {
29
    DataHigh = USIBR;
30
    USISR = (1 << USIOIF); // Overflow Flag zurücksetzen
31
    DataLowHighzaehler = 0;
32
    Prog_EN = 1;
33
  }
34
}
35
36
void loop() {
37
38
  if (Prog_EN == 1)
39
  {
40
    ZL_Data = (Adr_MSB << 6 | Adr_LSB << 1) & 0xFE;
41
    ZH_Data = (Adr_MSB >> 2) & 0x1F;
42
43
    //Fill Page buffer:
44
    asm volatile("lds r30,ZL_Data \n\t" : "=r"(ZL_Data) :  :"r30" );
45
    asm volatile("lds r31,ZH_Data \n\t" : "=r"(ZH_Data) :  :"r31" );
46
    asm volatile("lds r0,DataHigh \n\t" : "=r"(DataHigh):  :"r0" );
47
    asm volatile("lds r1,DataLow \n\t"  : "=r"(DataLow) :  :"r1" );
48
    SPMCSR = 0b00000001;
49
50
    //Erease Page:
51
    asm volatile("lds r30,ZL_Data \n\t" : "=r"(ZL_Data) :  :"r30" );
52
    asm volatile("lds r31,ZH_Data \n\t" : "=r"(ZH_Data) :  :"r31" );
53
    SPMCSR = 0b00000011;
54
55
    //Write Page:
56
    asm volatile("lds r30,ZL_Data \n\t" : "=r"(ZL_Data) :  :"r30" );
57
    asm volatile("lds r31,ZH_Data \n\t" : "=r"(ZH_Data) :  :"r31" );
58
    SPMCSR = 0b00000101;
59
60
    Adr_LSB++;
61
    if (Adr_LSB == 32)
62
    {
63
      Adr_LSB = 0;
64
      Adr_MSB = Adr_MSB + 1;
65
    }
66
    Prog_EN = 0;
67
68
  }
69
}

: Bearbeitet durch User
Beitrag #5754953 wurde von einem Moderator gelöscht.

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]
  • [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.