PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVRISP Programmieradapter zur Kommunikation mit PC verwenden



Steinigtmich
20.12.2007, 10:04
Salve

mir ist grade bei Atmel die Application Note AVR068: STK500 Communication Protocol (http://www.atmel.com/dyn/resources/prod_documents/doc2591.pdf) in die Hände gefallen.

Das Ding beschreibt wie der Titel schon sagt, das Kommunikationsprotokoll vom AVRISP bzw STK500.

In der AN ist mit folgendes Kommando aufgefallen, welches der PC an den Flashadapter senden kann:

CMD_SPI_MULTI
This is a generic command that can be used to execute any of the ISP commands. The command writes a number of bytes to the SPI bus, and returns a number of bytes.

Würde das nicht bedeuten, ich könnte wenn ich meinen AVRISP auf der Schaltung stecken hab, mittels des angeschlossenen Computers mit der Software im AVR über den SPI-Bus kommunizieren?
Also den AVRISP als "SPI-RS232-Interface" missbrauchen.

Ich müsste für mein Projekt am PC eine Software haben mit der man diverse Werte im Programm im AVR einstellen kann. Ich müsste das nicht häufig einstellen, nur aus Wartungsgründen ab und an mal. Und da ich die USART-Pins am AVR anderweitig belege und keine Lust habe auf Software-USART, wäre die Verwendung des SPI am eh schon vorhandenen ISP-Stecker eine optimale Methode.

Würde das gehen? Was meint ihr?


MfG Steinigtmich

AlKI
20.12.2007, 12:42
Ich würde mal tippen, dass das kein "SPI-RS232-Interface" ist, sondern dass einfach die SPI Schnittstelle statt zum Beschreiben oder Auslesen des AVRs eben zum kommunizieren genutzt wird (senden/ empfangen statt Speicher beschreiben/auslesen)

man kann ja auch Microcontroller untereinander mittels SPI kommunizieren lassen (soweit ich weiß)


RS232 geht aber auch über den lpt (dann eben mit 5V und 0V als Pegel)
Ich glaube aber nicht, dass es mit nem ISP-Programmieradapter geht.

Steinigtmich
20.12.2007, 13:02
...sondern dass einfach die SPI Schnittstelle statt zum Beschreiben oder Auslesen des AVRs eben zum kommunizieren genutzt wird (senden/ empfangen statt Speicher beschreiben/auslesen)

Na eben! So wie ich die AN verstanden habe, kann ich dieses Kommando mit den Bytes die ich über SPI senden will, mittels des PCs an den AVRISP schicken.

Also vom PC aus über RS232 das Kommando CMD_SPI_MULTI mit den zu schreibenden Bytes an den AVRISP schicken, dieser schreibt die Bytes dann per SPI in den AVR. Auslesen genauso.

AlKI
20.12.2007, 13:33
to execute any of the ISP commands


hmm, das hab ich irgendwie übersehen, oder statt "ISP" "SPI" gelesen...
das kommt mir vor, wie ein Befehl zum Beschreiben des Flash mit einem oder mehreren In-System-Programming Kommandos. aber warum über RS232?

Hubert.G
20.12.2007, 18:47
Wenn du auf deinem PC SPI nachbilden kannst sollte das schon funktionieren, allerdings musst du beachten das z.B. der Mega128 nicht die SPI-Schnittstelle für ISP verwendet. Fallst du für deinen Kommunikation den ISP-Stecker verwenden willst.

Steinigtmich
20.12.2007, 21:31
Oh, das würde schon passen. Ich möchte einen Atmega32 verwenden.

Das Ding ist halt nur, in meiner Schaltung ist der USART schon belegt, und wenn es sich vermeiden lässt will ich mich nicht in Software-USART reinklabüstern (bin von Natur aus faul). Und auch keine Extra-Hardware verwenden, mal abgesehen vom AVRISP, den ich im Servicefall eh am Mann habe.
Das Ganze wird ne Servicetechniker-Schnittstelle (mit mir als einzigem Servicemenschen), und ich möchte vom PC aus irgendwelche Werte in den Atmega reinschreiben können, und zwar möglichst ohne das Biest jedes mal neu zu flashen.

Was ich als interressantesten Aspekt an der Geschichte sehe (sofern es denn letztendlich überhaupt funktioniert), ist der, dass man beim Prototypen-Entwickeln von einer Schaltung mit nem AVR so nichtmal eine zusätzliche Schnittstelle (z.B. USART) zum "Debuggen" vorsehen müsste sondern sich einfach per Software z.B. die Werte von Variablen einfach über den ISP-Dongle ausgeben lassen könnte.
Watt dat spart....

Hubert.G
20.12.2007, 21:53
Die Variablenausgabe beim Debuggen sollte schon funktionieren, du wirst dir nur ein entsprechendes PC-Programm schreiben müssen, genau so wie für die Eingabe der Daten. Auf den Flash wirst du nicht zugreifen können, nur auf das EEPROM und auf Veriable die du vorher definierst.

Johnes
27.12.2007, 16:39
Ich würde doch ein Softprotokoll nutzen um eine weitere Schnittstelle zu basteln! Das Problem ist bei ISP dass du die Software auch auf dem AVR dafür schreiben müsstest! Es gibt dafür sicher keine Kommandos, die dir einzelne Register zurück gibt bzw. beschreiben lässt!

Bei einer USART kannst du die Kommandos ja nutzen wie du willst. Z.b. AT kommands oder Einfach nur Bytebefehle. Beim ISP musst du auf dem PC eine Software schreiben die die empfangenen Pakete lesen kann. Dann auch noch eine Software auf dem AVR, die dir überhaupt erst die Befehle sendet! (Zudem die Signale am ISP überhaupt einliest!)

Da wäre ein Soft-USART viel schneller geschrieben.

Ich habe bei mir auf einem Mega8 drei Softwareschnittstellen und die Hardware in Benutzung. (Datenkonzentrator für 3 RS-232 Geräte am PC)

Für die Kommunikation nutze ich einfach das Terminal von Windoof. Da kann ich dann einfach meine Befehle reinkloppen und der Atmel sendet diese weiter zu dem passenden Endgerät. Die rückkommenden Daten, werden dann vom Atmel umgesetzt und als Klartext auf dem Terminal ausgegeben.

Über das Terminal kann ich auch Intervalle für die automatische Messwertauslesung an den Atmel übertragen und dieser schreibt sich den Intervall dann in den EEPROM, sodass nach einem Neustart die Daten nicht erst per COM: eingestellt werden müssen.

Von einem Sensor lese ich jede halbe Stunde die Werte und der Atmel schreibt sie in einen Ringspeicher, den in im SRAM definiert habe. Über einen Befehl, kann ich diese Werte dann ins Terminal schreiben lassen und weiter verarbeiten.

MfG

Steinigtmich
27.12.2007, 19:51
Ja... sieht mir im Nachhinein auch zu kompliziert aus grade.
Nicht unschaffbar, aber da ich grade Urlaub hab und dementsprechend praktisch den ganzen Tag lang in meiner Bastelecke hocke und die lang ausgebrüteten Projekte umsetze, ist mir dafür grade ein bisschen zu wenig Zeit.
Will sagen: Der Aufwand scheint mir den Zweck nicht ganz zu rechtfertigen.
Ich hab schnell mal nen MAX232 rangehängt und gut is.

Aber irgendwo merke ich doch, das kanns auf Dauer nicht sein.
So werde ich mir bei Gelegenheit mal überlegen wie ich einen Universal-AVR-Adapter für den PC baue.

Soll können:
- Die AVRs flashen (STK500-Protokoll)
- Eine TWI-Schnittstelle bereitstellen
- Eine SPI-Schnittstelle
- Einen USART (roh auf 5V-Pegel)
- min. 8 Bit Datenport frei nach Lust und Laune konfigurierbar
- AD-Wandler (ist ja eh an einem Atmega dran, warum denn nicht...)

Kann heiter werden das zu bauen, und grade geht mir die Hardware aus, aber über kurz oder lang werde ich auf sowas wohl nicht verzichten können.