Forum: Mikrocontroller und Digitale Elektronik Tiny2313 Probleme beim Compilen


von Alexander P. (tollerteppich)


Lesenswert?

Hallo zusammen,,

ich hab nen kleines programm geschrieben weil ich nicht alle bauteile 
hatte nen servotester analog mit nem 555 aufzubauen.

und da ich eh nur 2 zustände (ein und aus) brauche habe ich mir gedacht 
das geht doch sicher fix mit nem chip.

mit _wait_ms() ein signal erzeugen was alle 22ms entweder nen 1ms oder 
2ms puls ereugt...

attyny2313's hatte ich auch noch nen paar rumfliegen.

also schaltung gelötet, surcecode geschrieben, und dann hat avr-studio 
das nicht übersetzt in ne hex

ob der surcecode richtig ist weis ich nicht aber da wir in der fh gerade 
mit nem 89c5131 programieren vermute ich das die befehle sehr ähnlich 
wenn nicht gleich sind...

jetzt bin ich mir unsicher woran es liegt, da es mehrere sachen sein 
können

inkompatibilität mit vista ?
fehlerhafter surcecode ?
fehlerhafte/fehlende einstellungen ? hatte eigendlich nichts eingestellt 
...
hm was könnte es noch sein

installiert sind:
-WIN-AVR
-AVR-Studio 4.14
-Vista 64bit
-MySmartUSB

ich habe die schaltung getestet mit dem MySmartUSB ISP funktioniert und 
der tiny wird auch richtig erkannt.

fuse bits hatte ich noch nicht ausgelesen aber der ist im 
auslieferungszustand (internal clock) ? kp...

joa vieleicht könnt ihr mir schnell weiterhelfen, das währe echt kuhl

viele grüße alexander

ach ich habe nen screenshot von avr-studio angehängt und der surcecode
1
#include <avr/io.h>
2
3
int main(void)
4
{
5
  while(1)
6
  {
7
   if(P0_D5==0)
8
   {
9
      P0_D4 = 1;
10
     _wait_ms(1);
11
      P0_D4 = 0;
12
     _wait_ms(22);
13
   }
14
   else
15
   {
16
      P0_D4 = 1;
17
     _wait_ms(2);
18
      P0_D4 = 0;
19
     _wait_ms(21);
20
   }
21
  }
22
}

von SD-Fritze (Gast)


Lesenswert?

Ja wo is den der Schuss?

von Alexander P. (tollerteppich)


Lesenswert?

Schuss ?1?

von Alexander P. (tollerteppich)


Lesenswert?

(Alt-F7)
Build:
make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
Build succeeded with 0 Warnings...

Message:
gcc plug-in: make() Target successfully built
gcc plug-in: PlugInUtility::getExternalHeaderFiles Dependency directory 
does not exist

(F7)
Build:
Build started 9.11.2008 at 12:55:23
make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
Build succeeded with 0 Warnings...

Message:
gcc plug-in: Error: Object file not found on expected location 
C:\Users\Tollerteppich\Desktop\AVR-Studio\Servotester\default\Servoteste 
r.elf
gcc plug-in: PlugInUtility::getExternalHeaderFiles Dependency directory 
does not exist

von (prx) A. K. (prx)


Lesenswert?

Joachim Brecht wrote:

> ob der surcecode richtig ist weis ich nicht aber da wir in der fh gerade
> mit nem 89c5131 programieren vermute ich das die befehle sehr ähnlich
> wenn nicht gleich sind...

Tolle Logik. Und wenn ihr in der FH grad PC-Technik gehabt hättet, dann 
hätte der Tiny2313 sicherlich auch einen 3D-Grafikprozessor drin. ;-)

Nö. Das sind beides Microcontroller, und als solche sind sie sich 
irgendwie ähnlich, aber allein schon der verwendete Compiler erzwingt 
eine andere Art mit Portpins umzugehen.

Fang mal mit dem hiesigen AVR GCC Tutorial an. Ohne mindestens minimale 
Kenntnisse im Umgang mit AVRs in C/WinAVR ist dieser Versuch hier 
sinnlos.

von Alexander P. (tollerteppich)


Lesenswert?

hab ich versucht.... wenn ich 3 tagen intensives studium des gcc 
tutorials veranschlage wird das machbar sein.

ich brauche so schnell es geht ein funktionierendes programm da damit 
der Bruschless-DC motor einer cnc angesteuert wird und ich die besser 
gestern laufen haben muss...

das ich um sauber zu programieren noch einiges lernen muss ist mir klar 
lol...

ich brauche zB ein beispielprogramm für den Tiny oder ähnliches.
durch vergleichen und analysieren eines surcecodes kann ich schneller 
lernen als 1000000000 seiten text zu lesen...

also praktische hilfe ist gefragt !

ich möchte wissen welche schritte ich machen muss damit ich mein 
geschriebenen surcecode in eine hex übersetzen kann !

wenn der surcecode falsch währe hätte avr-studio sicherlich gemeckert...



zudem habe ich schon programme geschrieben die auch funktionieren 
allerdings auf dem alten PC XP 32bit, Bascom

die laufen auch wie zB die auswertung eines RC signals.... und steuerung 
von funktionen....

das zeugs von der FH muss ich leider sagen funktioniert leider im 
gegensatz zu dem tiny kack hier .....

da ich auf bascom kein bock mehr habe und auch besser c-programieren 
kann will ich das jetzt mit c machen.... aber das ist MEGA frustrierend 
wenn garnichts klappt....

von Hmm... (Gast)


Lesenswert?

Aber du hast dir wenigstens das Inhaltsverzeichnis des Tutorials hier 
angeschaut? Das ist nichtmal eine Seite und bereits im oberen Drittel 
findet man das hier:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

Ein klein wenig tiefer findet man das hier:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Timer.2FCounter_des_AVR

Das ist eigentlich alles was man benötigt. Wenn du wie du bereits 
mehrfach erwähntest bereis C programmieren kannst und etwas Erfahrung 
mit AVRs hast, zwingt dich ja keiner das Tutorial ganz zu lesen.

Beispielcode ist übrigens im Tutorial enthalten, das zu einem Programm 
zusammenfrickeln musst du aber schon selber....

von yalu (Gast)


Lesenswert?

> Build:
> make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
> Build succeeded with 0 Warnings...

Da ist das make wohl dermassen abgek...t, dass es nicht einmal mehr in
der Lage war, eine Fehlermeldung auszugeben. Den (fehlerhaften)
Quellcode hat sich der Compiler an dieser Stelle noch nicht einmal
angeschaut.

Du musst also erst einmal versuchen, die Tools auf deinem Vista64 so zu
installieren, dass sie keine Exceptions mehr auslösen. Viel Spaß dabei
;-)

Zum Quellcode:
Die Ports werden auf dem AVR ganz anders angesprochen, s. Link von
Hmm...

_wait_ms heißt in der AVR-Libc _delay_ms. Dazu musst du
<util/delay.h> includen und die Optimierung des Compilers einschalten.

von Björn R. (sushi)


Lesenswert?

Bist du dir eigentlich sicher, dass dein BLDC-Servomotor angesteuert 
wird wie ein Modellbauservo?
Wenn ja, kannst du ja mal auf meiner Hompage gucken, hier: 
http://modellbau.bug-soft.net/index.php?cat=et&art=servotester .
Da ist ein einfachst-Servotester realisiert. Allerdings mit Timer und 
nicht mit diesem delay-murks. Ich habe übrigens auch Vista 64 Bit und 
WinAVR lief bei mir am Anfang auch nicht. Ich weiß nicht obs 
mittlerweile schon ne neue Version gibt, aber so lange isses noch niucht 
her, dass ich die runtergeladen habe. Es gibt jedoch einen 
(inoffiziellen) Patch, der Abhilfe schafft: 
http://www.madwizard.org/electronics/articles/winavrvista
Nachdem ich den installiert hatte, lief alles wie geschmiert.

von Alexander P. (tollerteppich)


Lesenswert?

erstmal vielen dank an die hilfreichen antworter,

ja ich habe mir schon gedacht das es an vista64 liegt....

wir hatten mit dem 89c5131 ein ähnliches problem das atmel keine vista64 
bit treiber zur verfügung stellt...

nunja ich hatte das in dem fall durch nen alten ISA slot embedded pc mit 
266mhz gelöst... ich werde wohl mein laptop wieder auf XP 32 bit 
umrüsten damit die ganze kacke wieder läuft.... naja da muss ich als 
erstes den hebel ansetzen.

ich glaube es ist besser (nicht einfacher) den laptop auf 32 bit zu 
machen damit man beide systeme hat 32 und 64 bit (PC)....

ich hab bis jetzt alles zum laufen bekommen außer diesen atmel kack 
immer... nunja vieleicht muss ich einfach nur warten bis irgendwann mal 
nen update kommt lol

dabei hat microsoft den firmen lange vor markteinführung von vista schon 
test systeme zur verfügung gestellt damit die firmen treiber entwickeln 
können... schade das manche firmen das verpennt haben...

> Bist du dir eigentlich sicher, dass dein BLDC-Servomotor angesteuert
> wird wie ein Modellbauservo?

ja der BLDC motor wird wie ein servo angesteuert, da sie alle die 
gleichen signale von den empfängern bekommen.

T=22,5ms  Tsignal=1-2ms  ( 1ms=-100%  1,5ms=0%  2ms=+100% )

die frässpindel läuft auch soweit und bei 16V und ca 8A also rund 130W 
rockt die mit 3mm zustellung und nem 6mm fräser durch alu... hab ich 
heut mal getestet.



> _wait_ms heißt in der AVR-Libc _delay_ms. Dazu musst du
> <util/delay.h> includen

ja das mit dem _delay_ms() hatte ich auch schon herausgefunden nur das 
mit der zu includenden datei wusste ich nicht das werde ich dann 
berücksichtigen.

> und die Optimierung des Compilers einschalten.

wie und wo ?

gruß alex

von Peter D. (peda)


Lesenswert?

Joachim Brecht wrote:
> fehlerhafter surcecode ?

Ja, deshalb auch die Fehlermeldungen.


>
1
> #include <avr/io.h>
2
> 
3
> int main(void)
4
> {
5
>   while(1)
6
>   {
7
>    if(P0_D5==0)
8
>

P0_D5 kannste voll knicken.

Hint: Die h-Files sind Textdateien, man kann darin lesen!

Und was nicht drinsteht, muß man selber definieren.

Ein Blick ins Datenblatt verrät, beim AVR heißen die Ports nicht 
P0,1,2,3, sondern PORTA,B,C,D usw.

Und außerdem sind im io.h die Portpins (noch) nicht als Bitvariablen 
deklariert, das muß man daher selber machen:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=67368

Und bei den AVR-Ports unterscheidet man PORTx, DDRx und PINx.


Peter

von P. S. (Gast)


Lesenswert?

So viel zur Ingenieurs-Elite von morgen...

P.S: Der Ansatz, das Timing mit _delay_ms hinzubekommen, duerfte 
ziemlich mager ausfallen.

von Alexander P. (tollerteppich)


Lesenswert?

@ Peter Dannegger

jo kuhl das hilft mir ein bischen weiter, immerhin wusste ich bis dato 
noch garnichts davon wie man einen avr über c ansteuert. in der fh 
c-programieren ist das eine aber das in der praxis anzuwenden ist was 
anderes...

also anstatt P0_D5 für einen eingang dann PIND5
oder
ausgang P0_D4 dann PORTD4

sehe ich das richtig ?

nur mal so aus neugier wo finde ich die *.h datein ?

das heist also ich kann den port d mit PORTD nur als byte ansprechen

dann müsste es doch gehen wenn ich dem PODTD für ausgang 4 den wert 01h 
setze und zum ausschalten wieder 00h

und den PINB nehme dann und dann über 20h abfrage also bit 5

ich vermute mal das PINx und PORTx aufem gleichen port nicht gehen

@ Peter Stegemann

ja nur mal soviel man bekommt ne kiste mit nem board in die hand 
gedrückt, dort ist ne anleitung bei wie man den chip in betrieb nimmt...

zudem gibt es fertige funktionen mitgeliefert für LCD RS232 ect.

woher soll das wissen kommen was du meinst lol... richtig lernen werde 
ich es wohl erst wenn man praktisch damit arbeitet...

daher versuche ich mir im vorfeld schon ein bischen wissen anzueignen.

groß rummeckern ist einfach, aber mal was gegen diese zustände zu tun 
wird auch nicht gemacht.... alle labern immer nur.... meinste uns 
studenten kotzt das nicht mindestens genauso an wenn man mit 
lehrmaterial von ano 1970 arbeiten muss, naja nen paar neuere geräte 
haben sie schon angeschafft. ich kan eh nix ändern drann darum mache ich 
die ausbildung fertig und such mir nen job.

an der fh läuft seit 10 jahren ein antrag über moderniesierungen... der 
jetzt so langsam umgesetzt wird...  ich habe zum tbeispiel zuhause nen 
ozzi rumstehen was usb  hat und auf nen usb-stik gleich die messwerte 
sowie nen screenshot speichern kann... in der fh haben die nur welche 
mit disketten lol oder drucker anschluss

zudem studiere ich energietechnik und ich glaube in meinem berufsfeld 
werde ich ic-programieren eher weniger zu tun haben... ma schaun nech

magst du auch begründen warum der ansatz mager ausfallen wird ?

oder lässt du mich dumm sterben ?

von P. S. (Gast)


Lesenswert?

Joachim Brecht wrote:

> @ Peter Stegemann

> ja nur mal soviel man bekommt ne kiste mit nem board in die hand
> gedrückt, dort ist ne anleitung bei wie man den chip in betrieb nimmt...
>
> zudem gibt es fertige funktionen mitgeliefert für LCD RS232 ect.
>
> woher soll das wissen kommen was du meinst lol... richtig lernen werde
> ich es wohl erst wenn man praktisch damit arbeitet...

Das ist schon eine Menge mehr, als du im Job mal haben wirst. Und dein 
Chef wird dann bestimmt nicht warten, bis dir jemand in einem Forum 
erklaert hat, was du zu machen hast... "sieh zu wie du klar kommst." ist 
hier die Devise.

> an der fh läuft seit 10 jahren ein antrag über moderniesierungen... der
> jetzt so langsam umgesetzt wird...  ich habe zum tbeispiel zuhause nen
> ozzi rumstehen was usb  hat und auf nen usb-stik gleich die messwerte
> sowie nen screenshot speichern kann... in der fh haben die nur welche
> mit disketten lol oder drucker anschluss

Besser man lernt es an der FH mit dem Schrott und hat im Job dann die 
tollen Tools, als andersrum. Aber keine Angst, auch im Job wirst du mit 
altem Schrott arbeiten muessen.

> magst du auch begründen warum der ansatz mager ausfallen wird?
>
> oder lässt du mich dumm sterben?

Ich bezweifle, dass das Timing so sehr sauber ausfallen wird. Ich kann 
mich natuerlich taeuschen, aber ich wuerde das mit einem Timer machen.

von Peter D. (peda)


Lesenswert?

Joachim Brecht wrote:
> also anstatt P0_D5 für einen eingang dann PIND5
> oder
> ausgang P0_D4 dann PORTD4
>
> sehe ich das richtig ?

Im Prinzip ja, mußt aber "PIND5" erstmal entsprechend definieren.


> nur mal so aus neugier wo finde ich die *.h datein ?

In Deiner WINAVR-Installation, z.B. bei mir ist das:
D:\AVR\winavr\avr\include


> das heist also ich kann den port d mit PORTD nur als byte ansprechen

Jain.
Du kannst Bitvariablen definieren (siehe obigen Link) und dann einzelne 
Pins ansprechen.
Ich mache das so, weil es sehr übersichtlich ist.
Oftmals haben ja die einzelnen Pins verschiedene Funktionen.
Hier mal ein Beispiel mit einzelnen Pins:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


> ich vermute mal das PINx und PORTx aufem gleichen port nicht gehen

Warum denn nicht?
Na klar kannst Du jeden Pin unabhängig benutzen.


Peter

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
Noch kein Account? Hier anmelden.