Hi, es war leider etwas schwer einen möglichst aussagekräftigen Titel zu finden, daher hier nochmal eine Beschreibung meines Problems: Ich habe einen Atmega16 mit einem atmega168 verbunden (mosi/miso gekreuzt) und möchte mit dem mega168 den atmega16 programieren. Vorerst möchte ich nur ein IdentifyDevice durchführen, um zu sehen ob die Verbindung überhaupt steht. Ich glaube mein Problem liegt bei folgender Aussage aus dem Datenblatt: "When writing serial data to the ATmega16, data is lcocked on the rising edge of SCK. When reading data from the ATmega16, data is clocked on the falling edge of SCK." Je nachdem wie ich CPOL und CPHA setze, bekomme ich leider nur immer entweder 0x00 oder 0xff zurück(ich hab schon alle möglichkeiten mit CPOL und CPHA ausprobiert...) Die SPI Schnittstelle takte ich mit 128khz, der zu programmierende uC lauft mit 8Mhz, es sollte also genug langsam sein .. (?) Meinen Sourcecode habe ich einmal angehängt, ist noch recht überschaubar, da ich erst eine nichtfunktionierende Identify Funktion habe... in der main.c sieht es so aus: ISP_Start(); ISP_InitProg(); ISP_Identify(&buffer[0]); ISP_Stop(); Ich wäre echt froh wenn mir jemand ein wenig weiterhelfen könnte damit ich den Rest des Programms bald einmal funktionierend fertigstellen kann. Nik
"mosi = master out slave in" verbinde mosi mit mosi und miso mit miso. Es kann immer nur einen Master geben! Ansonstem kenne ich mich nicht aus mit SPI, aber soviel weiss ich.
das erschien mir zwar etwas merkwürdig, aber ich habs dennoch probiert, nun bekomme ich einfach immer 0x1e,0x94,0x03,0xff zurück .. ich dachte aber eher an etwas wie "m16" .. oder liege ich da falsch? Hab leider gerade keinen anderen uC da, um zu testen ob der dieselbe Zeichenfolge als antwort ausgibt...
Na immerhin besser als gar nichts. Habe leider mein Breadboard nicht da, sonst würde ich mich auch mal etwas mit spi beschäftigen. Das habe ich nämlich noch nicht ausprobiert.
Hallo, du musst mal im Datenblatt schaun (bin mir nicht mehr sicher), aber soweit ich mich noch errinnere, sendet der AVR einen speziellen Code; das erste Zeichen gibt lediglich eine gültige Antwort an, das zweite den Hersteller (Atmel) und das dritte den Chip. Aber das sollte irgendwo im Datenblatt beim "Programmieren" stehen. MfG Christian
Hallo Nik, das was du zurück bekommst IST die ID deines Atmega16. Als Anhang ein Bildschirmabgriff den ich soeben gemacht habe. Dort kannst du die ID eines Atmega16 sehen und die lautet : 0x1E 0x94 0x003 das andere ist die ID meines JTAG MKII. Ich hoffe das hilft dir weiter. Pit
wow danke!!! Ja das hilft mir sogar seeehr weiter :) Ich dachte immer das sei nur Müll den ich empfangen habe, da Bezichnungen wie "m16" "m128" doch naheliegen würden, dachte ich zumindest ;-) Merwürdigerweise antwortet mir der atmega immer mit diesen Signature Bytes, gleichgültig ob CPOL und CPHA nun 1 oder 0 sind. Nik P.S. Im Datenblatt habe ich die Stelle mitlerweile auch gefunden, beim atmega16 stehts auf seite 264 bei "Signature bytes"
Hallo Nik, vielleicht noch interessant...Wenn Du das AVR Studio installiert hast findest Du unter folgendem Pfad sämtliche Einstellungen der Controller zum proggen. Unter anderem auch die Signature Bytes. Zum anschaun brauchst einen XML Viewer. C:\Programme\Atmel\AVR Tools\Partdescriptionfiles Gruß Peter
Cool, danke! Schade nur, dass die Files jeweils sehr gross sind, ansonsten könnte man ja über eine SD Karte und einen kleinen XML parser auf dem Atmega nachdenken...So, dass das FirmwareUpdate für den Programmer quasi aus diesen Files bestehen würde... träum :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.