Forum: Mikrocontroller und Digitale Elektronik Selfmade ISP Programmer


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 STMxP (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
^Hallo, ich habe eine kurze Frage, ich baue mir gerade einen eigenen ISP 
Programmer mit einem Mega328P. Programmieren will ich zuerst mal einen 
Tiny85.

Ich muss doch MOSI mit MOSI und MISO mit MISO verbinden, oder?
Oder muss das wie bei UART gekreuzt werden?!

von Oliver S. (oliverso)


Bewertung
6 lesenswert
nicht lesenswert
Ja.

Schreib die Abkürzungen aus, dann verstehst du es auch.

Oliver

von STMxP (Gast)


Bewertung
-4 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Ja.
>
> Schreib die Abkürzungen aus, dann verstehst du es auch.
>
> Oliver


Was bedeutet ja?!

Ja, ich muss es drehen oder ja es muss 1:1 gemacht werden, also MISO auf 
MISO und MOSI auf MOSI

von Georg M. (g_m)


Bewertung
3 lesenswert
nicht lesenswert

von Armin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
STMxP schrieb:
> Was bedeutet ja?!
Ja ist die Antwort auf deine Frage - aus streng logischer Sicht korrekt, 
nur  versteht das in der Realität niemand und es hilft auch nicht 
weiter.

von Logiker (Gast)


Bewertung
2 lesenswert
nicht lesenswert
STMxP schrieb:
> Ja, ich muss es drehen oder ja es muss 1:1 gemacht werden, also MISO auf
> MISO und MOSI auf MOSI

Ja genau so :)

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
"Ausschreiben" war das Stichwort, oder: "Master ist ein Master ist ein 
Master", hier der uC im Programmer, also der ATmega328, Slave ist der 
Ziel-uC, also der ATtiny85.
  Was sollte da "gedreht" werden?

von STMxP (Gast)


Bewertung
-4 lesenswert
nicht lesenswert
Armin schrieb:
> STMxP schrieb:
>> Was bedeutet ja?!
> Ja ist die Antwort auf deine Frage - aus streng logischer Sicht korrekt,
> nur  versteht das in der Realität niemand und es hilft auch nicht
> weiter.

Klar verstehe ich das, ein einfaches "JA" auf 2 Fragen beantwortet dann 
die letzte mit Ja, sprich ich muss es kreuzen.

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
"Also WAS ist jetzt Trumpf"?
Spaß beiseite - auch aus Sicht des Ziel-uCs ist der Programmer der 
Master, folglich nichts mit kreuzen. Zeigt aber sehr schön, dass es 
sinnvoll ist, bei so einem Selbstbau-Programmiergerät Schutzwiderstände 
vorzusehen.

von Peter R. (pnu)


Bewertung
0 lesenswert
nicht lesenswert
Beim Arbeiten mit ISP wird der Takt der Schnittstelle vom progger 
vorgegeben, also ist der progger der Master und das Ziel der slave.

Wer den Takt vorgibt ist der Master.

MOSI des proggers muss an MISO des Ziels.

Aber, warum probierst Du es nicht einfach aus?

Bei andren Aufgaben kann der dann programierte Kontroller als Master 
programmiert sein und dann selbst den Takt angeben.

: Bearbeitet durch User
von Edi R. (edi_r)


Bewertung
0 lesenswert
nicht lesenswert
Peter R. schrieb:
> MOSI des proggers muss an MISO des Ziels.

Bist du da wirklich sicher?

"Master out" verbinden mit "Master in"?

von STMxP (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Edi R. schrieb:
> Peter R. schrieb:
>> MOSI des proggers muss an MISO des Ziels.
>
> Bist du da wirklich sicher?
>
> "Master out" verbinden mit "Master in"?

Also ich habe es jetzt nicht gekreuzt gemacht. MISO an MISO MOSI an MOSI


Bei mir läuft das aber nur bedingt gerade. Ich kann bspw. den Chip erase 
durchführen aber ich kann nichts auslesen. Chip ID auslesen bekomme 
überall 0x00 zurück. Einer eine Idee woran das liegen könnte? MISO ist 
als Eingang der Rest als Ausgang konfiguriert.

16 Mhz mit 128 Teiler => 125 kHz der Tiny läuft mit 8 Mhz also /4 Regel 
passt.
Werte schreiben geht ja anscheinend aber warum nicht auslesen?!
Nutze CLK_LOW_DAT_RIS  SPI MODE 0

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ohne das Programm zu sehen wird da schwerlich jemand helfen können.

von Axel S. (a-za-z0-9)


Bewertung
3 lesenswert
nicht lesenswert
STMxP schrieb:
> Bei mir läuft das aber nur bedingt gerade. Ich kann bspw. den Chip erase
> durchführen aber ich kann nichts auslesen. Chip ID auslesen bekomme
> überall 0x00 zurück. Einer eine Idee woran das liegen könnte?

Du machst es wohl falsch.

Darf man erfahren, warum du etwas selber programmierst, was es dutzende 
Male fertig gibt? Falls deine Antwort lautet, daß du etwas dabei lernen 
willst: warum machst du das dann nicht? Fehlersuche ist ein fester 
Bestandteil des Programmierens. Warum sollten wir dir das abnehmen?

von STMxP (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> Ohne das Programm zu sehen wird da schwerlich jemand helfen
> können.

Noch gibt es kein richtiges PRogramm:

CPHA und CPOL ist 0 (SPI 0 Modus, andere machen aber kein Unterschied)
1
uint8_t spi_data(uint8_t c)
2
  {
3
    timeout = 100000;
4
    
5
    SPDR = c;
6
    while(!(SPSR & (1<<SPIF)) && (timeout--));
7
    {
8
      wdt_reset();
9
      _delay_us(1);
10
    }
11
    
12
    return (SPDR0);
13
  }


Das ist das PRogramm, kommt alle 10 sek.

1
ProgrammingEnable();
2
    usart_hextoa(read_signatures(Sig_Manufacture));
3
    usart_putc(',');
4
    usart_hextoa(read_signatures(Sig_FlashSize));
5
    usart_putc(',');
6
    usart_hextoa(read_signatures(Sig_DeviceID));

1
uint8_t ProgrammingEnable(void)
2
{
3
  uint8_t cnt = 0, data = 0;
4
  
5
again:
6
  
7
  DeviceToProgrammState(TRUE);
8
  spi_data(0xAC);
9
  spi_data(0x53);
10
  data = spi_data(0x00);
11
  spi_data(0x00);
12
13
  usart_ltoa(data);
14
15
  
16
  if (data == 0x53)
17
  {
18
    return (FALSE);
19
  }
20
  else
21
  {
22
    wdt_reset();
23
    cnt++;
24
    
25
    if (cnt > 10)  return (FALSE);
26
    else      goto again;
27
  }
28
}


1
void DeviceToProgrammState(uint8_t set_to_Prog)
2
{
3
  wdt_reset();
4
  UnselectSlave();
5
6
  _delay_ms(10);
7
8
  if (set_to_Prog)  SelectSlave();
9
  
10
  _delay_ms(200);
11
  wdt_reset();
12
}


1
uint8_t read_signatures(uint8_t x)
2
{
3
  spi_data(0x30);
4
  spi_data(0x00);
5
  spi_data(x);
6
  return (spi_data(0x00));
7
}

von STMxP (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> STMxP schrieb:
>> Bei mir läuft das aber nur bedingt gerade. Ich kann bspw. den Chip erase
>> durchführen aber ich kann nichts auslesen. Chip ID auslesen bekomme
>> überall 0x00 zurück. Einer eine Idee woran das liegen könnte?
>
> Du machst es wohl falsch.
>
> Darf man erfahren, warum du etwas selber programmierst, was es dutzende
> Male fertig gibt? Falls deine Antwort lautet, daß du etwas dabei lernen
> willst: warum machst du das dann nicht? Fehlersuche ist ein fester
> Bestandteil des Programmierens. Warum sollten wir dir das abnehmen?


Ich will nichts dabei lernen, ich finde den Fehler nicht sitze da schon 
lange dran, deswegen auch die Frage ob es vertauscht ist, weil langsam 
weiß ich echt nicht mehr was hier falsch läuft. ich brauche das für ein 
Gerät wo man weitere kleine Module updaten können soll auf die selber 
kein Bootloader passte. Daher um 3 Ecken.

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
(Autsch, ich hatte auf Assembler gehofft)
Wie sind diese 'Sig_irgendwas' definiert, und was ist 'SPDR0'?

von STMxP (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> (Autsch, ich hatte auf Assembler gehofft)
> Wie sind diese 'Sig_irgendwas' definiert, und was ist 'SPDR0'?



Sig_irgendwas sind nur die Befehle für die entsprechende ID, Man, etc. 
nach der Tabelle.


SPDR0 gibt es nicht, es muss SPDR sein, das Empfangsregister. Warum mir 
das Atmel Studio beim Mega32P zugelassen hat, gute Frage und genau das 
war der Fehler!!!

Ich küsse dein Nacken vielen Dank! Endlich läuft es! Das hat mir eine 
Zeit gekostet, wahnsinn. Wegen einer blöden 0

Beitrag #6349011 wurde vom Autor gelöscht.
von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Warum mir das Atmel Studio beim Mega32P zugelassen hat
Also in meinem (Assembler-)m328Pdef.inc gibt es die Zeile
1
.equ  SPDR0  = 0  ; SPI Data Register bit 0
Ist aber halt nur das LS-Bit.

von S. Landolt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Um genau zu sein: es ist die Position des Bits.

von Hmmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter R. schrieb:
> MOSI des proggers muss an MISO des Ziels.

Nein. MOSI an MOSI, MISO an MISO. Wenn das Device als SPI-Master 
arbeitet, ist MOSI ein Ausgang und MISO ein Eingang, bei Slave-Betrieb 
ist es umgekehrt.

Peter R. schrieb:
> Aber, warum probierst Du es nicht einfach aus?

Viel einfacher und materialschonender wäre ein Blick ins Datenblatt.

von Jack V. (jackv)


Bewertung
0 lesenswert
nicht lesenswert
STMxP schrieb:
> Ich will nichts dabei lernen

… dann gib ’nen Zehner hin und bekomme dafür ’nen fertigen, 
funktionsfähigen ISP-Programmer.

von Arduino Fanboy D. (ufuf)


Bewertung
-2 lesenswert
nicht lesenswert
Jack V. schrieb:
> ’nen Zehner
Das reicht auch dicke für einen Arduino UNO.
Und auch noch für das optionale ISP Shield

Selbst ein ScratchMonkey Dingen lässt sich dafür bauen.
https://github.com/microtherion/ScratchMonkey

Möglichkeiten satt.

von Helmut H. (helmuth)


Bewertung
0 lesenswert
nicht lesenswert
Hmmm schrieb:
> Wenn das Device als SPI-Master
> arbeitet, ist MOSI ein Ausgang und MISO ein Eingang,

Hängt vom Device ab, z.B. ATtiny 2313 als Three-wire SPI Master ist der 
Ausgang DO, das ist B6, was aber MISO ist(MISO/DO/PCINT6).

von Jack V. (jackv)


Bewertung
0 lesenswert
nicht lesenswert
Arduino Fanboy D. schrieb:
> Selbst ein ScratchMonkey Dingen lässt sich dafür bauen.
> https://github.com/microtherion/ScratchMonkey

Das sieht interessant aus, danke für den Link. *Aber:* glaubst du, dass 
der TE das zum Laufen bekommt, wenn er doch noch nicht mal die 
ISP-Verdrahtung zusammenbekommt – und halt auch gar nicht lernen will?

Ich meine, als ich das erste Mal davorstand, habe ich mich genau das 
Selbe gefragt. Die Ratlosigkeit ließ sich aber in weniger als 30s 
eigenständig beheben.


Edits: irgendwann … werde ich schon noch dahinterkommen, nach welchem 
Muster das Fettschreiben mal funktioniert, und mal nicht …

: Bearbeitet durch User
von Hmmm (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Helmut H. schrieb:
> Hmmm schrieb:
>> Wenn das Device als SPI-Master
>> arbeitet, ist MOSI ein Ausgang und MISO ein Eingang,
>
> Hängt vom Device ab, z.B. ATtiny 2313 als Three-wire SPI Master

Na gut, bei SPI per USI sieht's natürlich anders aus.

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.