PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Yeti programmieren anhand einer ISP- Schnittstelle



Mandy88
30.03.2010, 10:34
Hallo,

ich versuche grade einen Yeti- Roboter anhand einer ISP- Schnittstelle mit Hilfe eines mySmartUSB zu programmieren.
Die Infrarot- Schnittstelle habe ich nicht zum Laufen bekommen, deswegen bin ich auf ISP umgestiegen.
Das Problem hierbei ist, dass der mitgelieferte Controller (Atmega8) ISP "verbietet". Deswegen muss ich jetzt einen einfachen Atmega benutzen.
Leider funktioniert das nicht so, wie ich mir vorgestelt habe.
Ich kann mit MyAVR Workpad zwar Programme draufschreiben, aber sie werden nicht ausgeführt. Der Yeti bewegt sich nur "wild", auch wenn ich nur die "Augen" blinken lassen möchte.

Meine Fragen dazu:

1. Muss ich einen Atmega8L oder kann ich auch einen einfachen Atmega8 dazu verwenden?
2. Wieso führt der Yeti nicht das Programm aus, welches ich auf den Controller schreibe?
3. Muss ich irgendetwas in der Programmierung beifügen oder so, um den vorinstallierten Bootloader zu simulieren oder zu ersetzen???

Ich hoffe, ihr könnt mir helfen.
MFG MAndy

Bääääär
31.03.2010, 11:05
Hi Mandy88!

Nochmal einige kleine Fragen: Der YETI bewegt sich "wild"? Was soll das bedeuten; ich meine, passiert da irgendwas in irgendwelchen Mustern? Was passiert, wenn du einfach nur eine Endlosschleife ausführst? Hast du das gute Stück in der Software initialisiert?

Ich habe den YETI zwar nicht, aber so ein Verhalten bedeutet eigentlich einen Softwarefehler. Wenn du flashen kannst, dann läuft der Prozessor ja ordnungsgemäß.

Oder moment: Hast du die Fusebits gesetzt? Also Externe Taktquelle beispielsweise?!

Gruß,
Bääääär

Flash2over
31.03.2010, 11:55
Hi Mandy,

Du hast ja richtig spaß an deine Yeti. Ich hab meinen zusammengebaut und 1 Tag danach in ne Kiste gepackt und im Schrank verstaut.

Der Unterschied zwischen Atmega8 und Atmega8L ist lediglich das man den 8L schon mit 2,7V füttern kann aber er nur maximal 8Mhz verarbeiten kann. Der "normale" Atmega8 kannste erst ab 4,5V gebrauchen dafür kanner 16Mhz verarbeiten. Welchen du für den Yeti benutzt is also egal, da der Yeti mit 8Mhz und 5V arbeitet.

Was an deinem Programm nicht funktioniert kann ich dir leider nicht sagen, denn meine telepatischen Fähigkeiten sind noch nicht so stark ausgereift, dass ich deine Gedanken über so eine weite Entfernung lesen kann. Also hättest du die Möglichkeit, her zu kommen dann kann ich sie vll lesen, oder du einfach mal dein Programcode postest. ;)

Den Bootloader musste nicht draufspielen, denn der is nur da um über die Infrarotschnittstelle zu programmieren. Daran kann es also nich liegen.

Folgende Idee hätte ich noch:

Batterien auswechseln (is mir auch schon passiert :-P ). Wenns daran gelegen hätt, dann kannste auch nochma die Infrarot verbindung testen.

Evtl sind auch die Servos kaputt. Man weiß nie. Aber poste ma deinen Code, vll ist es einfach nur ein kleiner Fehler.

Mandy88
06.04.2010, 06:45
Hallo,

zum Testen, ob ich den Roboter beschrieben bekomme, benutze ich nur die "mitgelieferten Quellcodes". Die sind doch nicht fehlerhaft, oder?
Mit dem vorgeschriebenen Code, der die Augen blinken lassen soll, bewegt sich der Roboter nur "wild", wenn ich das Programm draufgespielt habe.
Damit meine ich, dass eigentlich nur die Augen blinken dürften. Der Roboter bewegt aber seine Motoren, also Beine.

Kann das daran liegen, dass ich einen Atmega benutze, der nicht mitgeliefert worden ist???
Kann ich beim mitgeliefertem Atmega "die festgelegte Sperre" für die ISP- Schnittstelle irgendwie umgehen???

Zum Draufspielen des Quellcodes benutze ich myAVR Workpad. Könnte das der Grund sein? Welches Programm könnte ich noch probieren???

@ Flash2over:
Ich habe ganz neue Batterien in den Yeti eingesetzt. Die Servos haben ja bei der Kalibrierung funktioniert, deswegen gehe ich davon aus, dass die Servos nicht kaputt sind. Außerdem führt der Yeti das vorinstallierte Programm vom mitgeliefertem Atmega aus.

Langsam fällt mir leider auch nix mehr ein. :(

Hat noch jemand eine Idee, wie ich den Yeti programmiert bekommen könnte???

MFG
Mandy

Furtion
06.04.2010, 09:52
Hi,

hast du schon mal probiert ein leeres Programm zu flashen, also ein
einfache Endlosschleife? Macht er da immer noch was?
Das Programmieren funktioniert aber? Also das was du reinschreibst ist
auch indentisch mit dem was du wieder ausließt?
Wie oben schon erwähnt würde ich mit noch mal die Fusebits anschauen
sieht ja nach nem Keramikschwinger aus =/= "nomalen" Quarz.

Mandy88
06.04.2010, 12:13
Hallo,

1. Der mitgelieferte Atmega8 lässt sich net programmieren, weil die Schnittstelle ISP gesperrt ist, wie schon vorher beschrieben. :-b

2. Habe jetzt eine leere Endlosschleife auf einen anderen Atmega geschrieben. Der Yeti macht jetzt wirklich gar nicht mehr.

3. Als Fusebits habe ich extern crystal/resonator medium Frequenz; Start-up time: 16k CK+ 4ms eingestellt.

4. Habe jetzt versucht das mitgelieferte Programm (02, Yeti will blink its right eye 5 times) auf den Atmega zu schreiben. Das funktioniert aber nicht.

Der Fehlertext lautet:

Hinweis: Um den vollen Funktionsumfang von C/C++ nutzen zu können, verwenden Sie bitte die Dateiendung '.cc' oder '.cpp'
compilieren ...
In file included from c:/programme/myavrworkpad/winavr/lib/gcc/../../avr/include/avr/io.h:329,

from yeti.h:24,
from test.c:4:
c:/programme/myavrworkpad/winavr/lib/gcc/../../avr/include/myAVR.h:95:3: warning: #warning F_CPU nicht definiert
linken ...
test.o: In function `main':
test.c (.text+0xa): Linkerfehler: undefinierte Sprungadresse: `vInitYeti'
(.text+0x14): Linkerfehler: undefinierte Sprungadresse: `vFrontLEDs'
(.text+0x1a): Linkerfehler: undefinierte Sprungadresse: `vWaitMilliseconds'
(.text+0x1e): Linkerfehler: undefinierte Sprungadresse: `vFrontLEDs'
(.text+0x24): Linkerfehler: undefinierte Sprungadresse: `vWaitMilliseconds'

Kann mir da jemand weiterhelfen?

MFG Mandy

Furtion
06.04.2010, 13:18
Hi,

also bei dem Quarz würde ich noch mal schauen (Datenblatt) es gibt auch
die Einstellung für nen Keramitschwinger (hab ich aber noch nie benutzt).
Der andere Atmega lässt sich aber ganz normal beschreiben/lesen oder?
Mhm bei den Fehlercodes kenn ich mich net so gut aus, evt. ein
Leerzeicehn in dem Pfad wo die Datei liegt?/ heißt die Datei main.c/ hast
du die lib für den yeti eingebunden (auch den pfad angegeben)
Das würde mir jetzt so einfallen.

Mandy88
07.04.2010, 06:17
Hallo Leute,

zur besseren Hilfe der Quelltext:

//----------------------------------------------------------------------
// Titel : Yetis blinkendes Auge
//----------------------------------------------------------------------
// Funktion : Das rechte Auge des Yetis blinkt 5 x
//----------------------------------------------------------------------
// Prozessor : Atmega8
// Takt : 3.6864 MHz
// Sprache : C
// Datum : 7. April 2010
// Version : 1.0
// Autor : Mandy
//----------------------------------------------------------------------
#define F_CPU 3686400 // Taktferquenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
#include "yeti.h"
#include <avr/eeprom.h>
//----------------------------------------------------------------------

int main(void)
{
int i; // definiert Variable i als Integerwert
vInitYeti();

for(i=0 ;i<5 ;i++)
{ // Zählschleife, Wiederholung 5x
vFrontLEDs(RIGHT); // aktiviert das rechte Auge vom Yeti
vWaitMilliseconds(500); // 0,5 s Wartezeit
vFrontLEDs(OFF); // deaktiviert das rechte Auge vom Yeti
vWaitMilliseconds(500); // 0,5 s Wartezeit
}
return 0;
}
//----------------------------------------------------------------------

Und hier noch mal der Fehlertext:

Hinweis: Es wird die im Quelltext angegebene Sprache verwendet: C
Hinweis: Es wird die im Quelltext angegebene Einstellung des Prozessors verwendet: Atmega8
compilieren ...
linken ...
unbenannt.o: In function `main':
unbenannt.cc (.text+0xa): Linkerfehler: undefinierte Sprungadresse: `vInitYeti()'
(.text+0x14): Linkerfehler: undefinierte Sprungadresse: `vFrontLEDs(unsigned char)'
(.text+0x1a): Linkerfehler: undefinierte Sprungadresse: `vWaitMilliseconds(unsigned int)'
(.text+0x1e): Linkerfehler: undefinierte Sprungadresse: `vFrontLEDs(unsigned char)'
(.text+0x24): Linkerfehler: undefinierte Sprungadresse: `vWaitMilliseconds(unsigned int)'

Als Fusebits habe ich eingestellt: Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 64 ms

Zum Programmieren verwende ich das Programm myAVR Workpad und USB- Programmer mySmartUSB.

Kann mir jemand helfen? Ich verstehe die Fehlermeldung nicht. :frown:

MFG Mandy

Flash2over
07.04.2010, 07:13
Hi Mandy,



#define F_CPU 3686400 // Taktferquenz des myAVR-Boards
#include <avr\io.h> // AVR Register und Konstantendefinitionen
#include <avr/eeprom.h>

kannste weglassen.
-CPU Frequenz ist auch 8Mhz und nicht 3,6864Mhz
-Die io.h und die eeprom.h ist wenn sie gebraucht wird schon in der Yeti.h mit eingebunden.
Daher reicht das einbinden der Yeti.h

#include "YETI.h" muss also bleiben.

Der Rest ist ok.
Du musst allerdings deinem Programm sagen wo diese Yeti.h liegt. Da ich das auch noch machen muss an meinem Laptop mach ich dazu nacher n kleines Bildertutorial. Jetzt muss ich allerdings erst schnell was erledigen. Aber gegen 9.30 bin ich wieder daheim.

Bis dahin
Gruß
Thomas

p.s. für Quellcode immer die Code Funktion des Forums benutzen, so bleibst übersichtlicher!

Mandy88
07.04.2010, 07:55
Hallo Thomas,

Ich habe schonmal ein bissl rumprobiert.
Ich habe dem Programm gesagt, wo yeti.h liegt.

#include "C:\test\yeti.h"

Meinst du das damit? So funktioniert das leider immer noch nicht. :(

Ich wusste nicht, dass das Forum eine Code- Funktion hat, sorry. Aber ich werde die Funktion in Zukunft nutzen. :D :D

MFG
Mandy

Flash2over
07.04.2010, 09:15
Also:

Du musst dir als erstes einma WinAVR installieren. Hier (http://sourceforge.net/projects/winavr/files/WinAVR/20100110/WinAVR-20100110-install.exe/download)

Danach installierst du es (Wenn du das nicht schon vorher gemacht hast).
Damit bekommst du einen AVR-GCC Compiler. Dieser kann dir deinen Programmcode in einen auf dem AVR lauffähigen Code umwandeln.

In der Installation ist das sogenannte "Programmers Notepad 2" enthalten. Das ist die Programmieroberfläche die du am bessten zum Yeti und Asuro programmieren nutzt.

Jetzt musst du wissen was du brauchst um ein lauffähiges Programm zu erstellen.

Da wären:

-Die eigentliche .c Datei
-Ein Makefile
-Die Yeti-Bibliotheken

Die eigentliche .c Datei:
Sie ist die eigentliche Datei in der du dein Programm entwickelst. In ihr muss bezug auf die anderen Dateien sein. Dies wird hier durch #include "yeti.h" gemacht.

Makefile
Im Makefile sind Informationen enthalten die helfen das Programm in Maschienensprache umzuwandeln.
Wenn du dir das Makefile in einem Editor anschaust sieht man z.B. für welchen AVR Compiliert werden soll (MCU = atmega8). Hier musst du anfangs nichts ändern. Einfach ein schon fertig geschriebenes Makefile benutzen. (Wichtig ist auch hier bei zusätzlichen "Bibliotheken" muss ein Verweis ins Makefile, gibt aber genug Infos im RN-Wissen bzw. Asuro-Wiki)


Die Yeti-Bibliotheken
Diese Bibliotheken besehen aus 2 Files. Die Yeti.h und die Yeti.c.
Eine Bibliothek beinhaltet Routinen, welche die Programmierung vereinfachen. So wird z.B. festgelegt was beim AugenLEDanschalten Befehlt passiert. So hast du einfache Befehle und musst nicht immer mehrere Einzelbefehle eintippen. Das macht das Programm kürzer und leichter zu verstehen.
Die Bibliotheken werden über den Linker später beim Compilieren eingebunden. Da in der .h Datei die .c Datei eingebunden ist müssen wir nur die .h Datei im Hauptprogramm einbinden.

Also brauchen wir jetzt letztendlich 4 Dateien. Diese hab ich dir in einer .rar Datei angehängt. Sie sind auch auf der Yeti CD im Verzeichnis "/YETI_src/Examples/02, Yeti will blink its right eye 5 times"
Dabei ist noch eine .pnproj und eine .pnps Datei. Die .pnpproj kannst du mit dem Programmers Notepad 2 öffnen und hast alle Files in einer Auswahlleiste.

Wenn du das alles geladen hast kannst du im PN2 auf Tools->[WinAVR]Make All klicken. Das Programm Compiliert dir jetzt deinen Code und im Verzeichnis in dem alle Dateien liegen sollte eine .hex Datei
liegen. Diese kannst du jetzt auf deinen Atmega flashen und es sollte so laufen.


Klingt alles ein bisschen kompliziert aber du kannst ja gerne nachfragen.

Gruß
Thomas

Flash2over
07.04.2010, 09:19
Ach ja hier noch eine von mir Compilierte test.hex Datei damit kannst du schonma testen. Sie sollte funktionieren.

Mandy88
07.04.2010, 09:27
Hallo Thomas!

Den ganzen Kram habe ich schon installiert, weil das ja in der Gebrauchsanweisung zur Infrarotschnittstelle angegeben ist.
Bei mir funktioniert das so aber nicht, weil ich ja über eine ISP- Schnittstelle programmiere.
Da funktioniert das Flash- Tool nicht.
Oder soll ich die .hex über myAVR Workpad auf den Atmega draufspielen?
Oder womit kann ich das Programm auf den Atmega speichern?

MFG
Mandy

Flash2over
07.04.2010, 09:32
Dafür gibt es doch das AVRProgTool Da kannst bei Flash Brennen die .hex Datei wählen.

Mandy88
07.04.2010, 09:33
Achso... Ich hab die Datein damit schon umgewandelt und versucht mit myAVR Workpad auf den Atmega zu schreiben.
Es kam auch keine Fehlermeldung, aber die LEDs blinken auch nicht. :D

Mandy88
07.04.2010, 09:35
Beim AVRProgTool passiert genau das gleiche. Der Flash-Speicher wird korrekt beschrieben, aber das Programm wird nicht ausgeführt... :(

Flash2over
07.04.2010, 09:41
Hast du ein oszi zur Verfügung? Mess mal nach ob der Schwinger schwingt und ob an der LED etwas schwingt?

Mandy88
07.04.2010, 09:43
was meinst du denn mit Schwinger?
Joah, ich hab ein Oszi an meinem Platz... Ich messe mal nach...

Flash2over
07.04.2010, 09:44
Keramikschwinger....das teil das du als Q1 eingebaut hast

Mandy88
07.04.2010, 09:56
An dem linken und rechtem Pin von Q1 ist ca. 0,7 V. An den LEDs sind durchgehend 0 V. :-k

Flash2over
07.04.2010, 10:04
Was is direkt am 4. Pin vom Atmega (PD2)? Hab gerade meinen Yeti vom Dachboden geholt und wenn ich ihn anmache sind beide Augen am leuchten für ein paar Sekunden bevor das Blinken anfängt. Ist das bei dir auch so?

Mandy88
07.04.2010, 10:12
Bei mir machen die LEDs gar nix mehr.
Habe vorher ja die Endlosschleife auf den Atmega gespielt.
Am Pin 4 sind gelegentliche kurze sehr kleine Spannungsspitzen (negativ und positive). Mit dem Mutimeter messe ich 41 mV.

Beim mitgeliefertem Atmega leuchten die Augen auch erst auf, bevor sich die Servos einstellen. Den Atmega kann ich aber nicht benutzen, weil er die ISP- Schnittstelle sperrt.

Flash2over
07.04.2010, 10:18
Ja ok blöde Frage...der Bootloader zieht die 2 LEDs auf 5V deshalb leuchten sie. Auf deinem is der ja nicht ;)
Was ich mir jetzt noch vorstellen kann ist das entweder die Fuses falsch eingestellt sind. (CKSEL0..3 müsste auf 1111 sein laut Datenblatt) Oder vll auch die LEDs kaputt sind.
Wobei wenn du mit dem Oszi ein Rechtecksignal misst, dann dürfte nur die Frequenz nicht stimmen und du nimmst das Blinken nicht wahr. Also Fuses prüfen^^

Mandy88
07.04.2010, 10:23
Die LEDs können ja nicht kaputt sein, weil sie ja leuchten wenn dar Standard-Atmega eingebaut ist. Ich schau mal wegen den Fusebits. Kenne mich damit nur leider gar nicht aus. :(

Flash2over
07.04.2010, 10:29
Ext. Crystal/Resonator High Freq. Start-up time: 16K CK + 64 ms

oder so ähnlich

Mandy88
07.04.2010, 10:32
hmmm... Das funktioniert auch nicht. :(

Mandy88
07.04.2010, 10:35
low fuse 0xCE | high fuse 0x99 | Lockbits 0xFF
11001110 10011001 |11|111111

Das sind die momentanen Einstellungen...

Flash2over
07.04.2010, 10:36
Hast den Kassenzettel noch? Wenn ja gib ihn zurück und hol dir n Asuro^^

Irgendwie is das komplette Verhalten komisch...Du könntest dir aber ne Testschaltung bauen. Einfach ne LED mit Kathode an GND und mit Anode über nen 470Ohm Widerstand an Pin4 (PD2). Dann kannst du mit der .hex Datei von mir testen ob nicht auch dein jetziger atmega müll is. (Ach ja bei Testschaltung am bessten nen 8Mhz Quart mit einbauen oder Fuses auf internen Takt stellen).

Flash2over
07.04.2010, 10:38
Ok Low Fuse auf 0xFF stellen ;)

Mandy88
07.04.2010, 10:41
Ich hab den Asuro auch hier. HAt der Betrieb gekauft. Nicht ich selber. Die Dinger liegen hier schon seit Jahren rum.
Wir haben nen Techniktag in der BBS und ich hab mir den Yeti als Mikrocontroller-Projekt zusammen mit einem Kollegen ausgesucht...

Danke für deine Hilfe! Ich werde das mal mit der Testschaltung probieren.

Aber ich habe noch eine Vermutung... Der mitgelieferte Atmega ist ja einAtmega8L. Das heißt, das dieser ja mit kleineren Spannungen arbeiten kann als der normale Atmega8, oder? Da ich einen normalen Atmega8 benutze, kann es dann sein, dass die Spannungen für diesen Atmega zum verarbeiten zu klein sind???

Flash2over
07.04.2010, 10:49
Der Yeti sollte mit 5V laufen. Aber das kannste ja ma nachmessen. Wenn weniger als 4,5V fließt dann musste nen 8L nehmen wenn nicht dann is der Atmega8 ok.

Wenn du noch einen Asuro hast nimm doch mal den Atmega bzw. teste am Asuro deinen USB Programmer....Die Hardware is ja die selbe. So wissen wir wenigstens ob der USB-Programmer kaputt is oder die Platine vom Yeti.

Flash2over
07.04.2010, 10:53
Ach ja fürn Projekt isses immer gut Verbesserungen einzubringen. Hier hab ich ne Verbesserung der Laufeigenschaften gepostet:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=20369&start=96

Mandy88
07.04.2010, 11:36
Die Versorgungsspannung am Atmega ist ca. 5,4 V. Dann sollte das ausreichen.

Den Atmega vom Asuro kann ich auch nicht programmieren, weil die ISP- Schnittstelle genauso gesperrt ist, wie beim Yeti auch...

Der USB- Programmer kann auch nicht kaputt sein, weil ich ja beim Atmega die Fusebits schreiben und lesen kann. Und ich konnte ja die Endlosschleife auf den Atmega programmieren... Achso... ich kann übrigens auch den Flash-Speicher vom Atmega lesen.
Das alles würde doch nicht gehen, wenn der USB-Programmer kaputt wäre, oder?

Das einzige was wir an der Schaltung geändert haben ist, dass wir die Infrarot- Sender und -Empfänger ausgebaut und überbrückt haben.
Kann deswegen der Fehler auftreten?

MFG
Mandy

Mandy88
07.04.2010, 12:01
Es funktioniert!!!!!!!!!!!!!!!!!!!!!

Habe die Fusebits auf Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms gestellt, um die Testschaltung zu testen und auf einmal haben die LEDs geblinkt! :D

Vielen Dank für deine Hilfe Thomas!

MFG
Mandy

Flash2over
08.04.2010, 04:48
Na das hört man doch gern.

Mit dem Testen meine ich nicht dein USB-Programmer sondern den Tranciever vom Yeti um ihn dann doch richtig zu programmieren, so wie es vorgesehen ist. Aber wenn ihr mit der jetzigen Situation klar kommt dann ist das ja auch ok. Ich wünsche euch noch viel Spaß und keine solchen Fehler mehr!

Gruß
Thomas