ISP per software SPI

Gast #1287194
Hallo Leute,

ich versuche verzweifelt hier einen Atmega8 von einem Mega644 aus per 
ISP zu programmieren. Die Programmierung soll dabei per Software SPI 
erfolgen.

Leider bringt mir der Mega8 statt dem (0x53 == ich bin in den 
programmiermodus versetzt worden) immer nur 0xff zurück :-/
Inzwischen frage ich mich schon in welchem Modus programmiert wird, laut 
meinem Mega8 datenblatt sampelt er bei der Taktflanke low->high

Meine Routine wie folgt:

Routine um ein Byte per Softspi zu senden und gleichzeitig das zu lesen, 
welches der slave in dem Moment zurückschickt. (die ganzen SX_... makros 
sind richtig definiert und bewirken auch das richtige.)
1
//############################################################################
2
unsigned char softspi_rwb (char byte, uint8_t n)
3
//############################################################################
4
{
5
        // n = softspi nummer
6
        char ret;
7

8
        for (unsigned char a=8; a>1; a--) { // MSBit first
9
            if (byte & (1 << (a-1))) {
10
                *(SX_MOSI_PORT[n]) |= SX_MOSI_PIN[n]; //Mosi = 1
11
            } else {
12
                *(SX_MOSI_PORT[n]) &= ~(SX_MOSI_PIN[n]); //Mosi = 0
13
            }
14

15
            // Takt High  (Ein Bit senden/Empfangen)
16
            *(SX_SCK_PORT[n]) |= SX_SCK_PIN[n];
17

18
            // Jetzt kann gültiger Status gelesen werden
19
            if (*(SX_MISO_PORT[n]) & SX_MISO_PIN[n]) {
20
                ret |= (1 << (a-1));
21
            } else {
22
                ret &= ~(1 << (a-1));
23
            }
24

25
            // Takt Low  (Bit übernommen)
26
            *(SX_SCK_PORT[n]) &= ~(SX_SCK_PIN[n]);
27
        }
28
        return ret;
29
}
Angesteuert das ganzen dann via
1
    char temp;
2
    //set Chip_Select to high (INAKTIV)
3
    *(SX_SS_PORT[n]) |= SX_SS_PIN[n];
4

5
    //set Chip_Select to low (Aktiv)
6
    *(SX_SS_PORT[n]) &= ~(SX_SS_PIN[n]);
7

8
    // Takt Low
9
    *(SX_SCK_PORT[n]) &= ~(SX_SCK_PIN[n]);
10

11
    // Reset Toggle
12
    *(SX_RES_PORT[n]) &= ~(SX_RES_PIN[n]);
13
    _delay_ms(1);
14
    *(SX_RES_PORT[n]) |= SX_RES_PIN[n];
15
    _delay_ms(1);
16
    *(SX_RES_PORT[n]) &= ~(SX_RES_PIN[n]);
17

18
    for (int i = 0; i < 20; i++) _delay_ms(1);
19

20
    temp = softspi_rwb(0xAC, n);
21
      //temp ist dann 254
22
    temp = softspi_rwb(0x53, n);
23
      //temp ist wieder 254
24
    temp = softspi_rwb(0x00, n);
25
      //temp ist wieder 254
26

27
    if (temp == 0x53) {
28
        #ifdef _UDPDEBUG_
29
                udpLog("programming mode Success ", n);
30
        #endif
31
    } else {
32
        #ifdef _UDPDEBUG_
33
                udpLog("no answer from controller ", temp);
34
        #endif
35
        return 1;
36
    }


naja, leider funktioniert das so nicht. Gibts irgendwo ein Beispiel, wo 
jemand sowas schon implementiert hat? Laut datenblatt und verschiedener 
PDFs sollte das so klappen :-/

Vielen Dank!
Gast
Wollte nur nochmal ne Rückmeldung geben für andere mit dem selben 
Problem:

die Zeile
1
for (unsigned char a=8; a>1; a--) { // MSBit first

in
1
for (unsigned char a=8; a>0; a--) { // MSBit first


ändern und es klappt... Ein byte hat halt doch 8 bit ;) Danke Oscar ;)


Lg

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.