Forum: Mikrocontroller und Digitale Elektronik Ich bräuchte mal Starthilfe.


von Lukas W. (Gast)


Lesenswert?

Hallo zusammen,
ich wollte mich mal mit den AVRs beschäftigen weil ich überall gehört 
hab das es da viel bessere Entwicklungsmöglichkeiten gäbe als für die 
von mir bis her genutzten PIC-Controller. Außerdem höre ich and er Uni 
gerade eine Veranstaltung "Systeme mit Contollern" in der wir uns im 2. 
Teil mit AVRs beschältigen.
Also hab ich mir einen kleinen Programmer gebaut (einen abgespeckten 
siprog) und das AVR-Tutorial angefangen durchzuarbeiten. Dazu hab ich 
auf meinem Ubuntu Linux 7.10 erst mal folgende Software installiert:
1
$ apt-show-versions | grep avr
2
avrdude/gutsy uptodate 5.4-1
3
gdb-avr/gutsy uptodate 6.4.90.dfsg-1
4
gcc-avr/gutsy uptodate 1:4.2.1-1
5
avra/gutsy uptodate 1.2.1-1
6
avr-libc/gutsy uptodate 1:1.4.5-2
7
binutils-avr/gutsy uptodate 2.17
8
avrdude-doc/gutsy uptodate 5.4-1
9
simulavr/gutsy uptodate 0.1.2.2-5

Gescheitert bin ich dann am ersten Beispiel:
Da ich keine vernünftige IDE für Linux gefunden habe, hab ich mich 
zunächst mal auf die Konsole zurückgezogen. Das sollte ja auf jeden Fall 
erst mal gehen. Beispielcode kopiert und versucht zu kompilieren:
(die Ausgabe mit avra sieht ähnlich aus)
1
$ avr-as -mmcu=atmega8 test.asm
2
test.asm: Assembler messages:
3
test.asm:1: Can't open m8def.inc for reading: No such file or directory
4
test.asm:4: Error: constant value required
5
test.asm:7: Error: constant value required

ok, ich hatte nicht erwartet das das mit dem Include funktioniert. Also 
habe ich mein gesamtes System nach diesen Includes abgesucht, ohne 
Erfolg. Woher die kommen sollen ist im Tutorial für Linux auch nicht 
erklärt. Sicher ist das in einem der AVR-Tools drin, aber wie bekomme 
ich das da raus? (setup.exe will mein Linux weder ausführen noch 
entpacken ;-).

--> Also ab zum AVR-GCC-Tutorial, vielleicht hat man da ja mehr Glück.
Programme waren ja schon installiert, also auf zum ersten Beispiel. 
Programmcode nach main.c kopiert, Beispiel Makefile 1 nach Makefile 
kopiert (der Inhalt schien mir zunächst mal OK) und "make all" 
eingegeben.
1
$ make all
2
3
-------- begin --------
4
avr-gcc (GCC) 4.2.1
5
Copyright (C) 2007 Free Software Foundation, Inc.
6
This is free software; see the source for copying conditions.  There is NO
7
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
8
9
make: *** Keine Regel vorhanden, um das Target »main.elf«,
10
  benötigt von »elf«, zu erstellen.  Schluss.
Ja was sagt man da? Bin ich einfach zu blöd, sind die AVRs den 
Windows-Usern vorhebalten oder was mach ich falsch?

Danke für eure Hilfe,

Gruß
Lukas

von yalu (Gast)


Lesenswert?

> $ avr-as -mmcu=atmega8 test.asm
> test.asm: Assembler messages:
> test.asm:1: Can't open m8def.inc for reading: No such file or directory

Der avr-as ist nicht kompatibel zum Atmel-Assembler. Die Syntax
einiger Befehle ist anders, und die Include-Files heißen anders. Dass
das Programm m8def.inc includet, ist ein Zeichen dafür, dass es für
den Atmel-Assembler geschrieben ist, beim avr-as würde man avr/io.h
aus der avr-libc includen. Der avra soll Atmel-kompatibel sein, ich
haber allerdings keinerlei Erfahrungen mit diesem Tool. Aber
vielleicht probierst du es einfach mal aus.

> Also habe ich mein gesamtes System nach diesen Includes abgesucht,
> ohne Erfolg.

Wenn die Includes beim avra nicht mit dabei sind, musst du sie
möglicherweise vom AVR-Studio von Atmel rüberkopieren.

> setup.exe will mein Linux weder ausführen noch entpacken ;-

Ist das das setup.exe vom AVR-Studio? Wenn das beim besten Willen
nicht geht (auch nicht mit unzip?), musst du einen freundlich
gesinnten Windows-User suchen, der das für dich entpackt.

> make: *** Keine Regel vorhanden, um das Target »main.elf«,
>   benötigt von »elf«, zu erstellen.  Schluss.

Da stimmt irgendetwas mit deinem Makefile nicht.

> Ja was sagt man da? Bin ich einfach zu blöd, sind die AVRs den
> Windows-Usern vorhebalten oder was mach ich falsch?

Keine Sorge, AVRs lassen unter Linux mindestens so gut programmieren.
Ich schätze, du hast dir für den Anfang einfach die falschen Beispiele
ausgewählt ;-)

von Niels H. (monarch35)


Lesenswert?

> Ja was sagt man da? Bin ich einfach zu blöd, sind die AVRs den
> Windows-Usern vorhebalten[...]

Nein, dein Makefile ist nicht komplett. Linux setzt nunmal ein paar 
gewisse Grundkenntnisse vorraus, was die Entwicklung nicht wirklich 
vereinfacht.

In deinem Makefile gibts es offensichtlich keinen avr-gcc aufruf.
Ich empfehle dir einfach mal irgendein X-Beliebiges Projekt herunter 
zuladen mit halbwegsvollständigen Makefile.

von Düsentrieb (Gast)


Angehängte Dateien:

Lesenswert?

ich benutze avra...
und als programmer sp12
funzt .

von Lukas W. (Gast)


Lesenswert?

Danke schon mal für eure Hilfe.
Also das mit dem Assembler hab ich mir so ähnlich gedacht, hab das 
AVR-Studio mal auf dem Rechner von meinem Bruder installiert und die 
Includes kopiert, damit läuft avra und auch der mit dessen Ausgabe 
geflashte ATTiny13 macht was er soll :-)

Das mit dem Makefile hab ich aber nicht verstaden. Was soll da falsch 
sein? Ich habe GENAU das auf dieser Seite als Bsp. 1 aufgeführte 
Makefile: http://www.mikrocontroller.net/articles/Beispiel_Makefile
Das habe ich auch in diversen Projekten gefunden, das kann also so 
falsch gar nicht sein. Da sind ja schließlich auch compiler-Aufrufe 
drin.

Hab mir auf der Suche nach einer IDE mal das AVR-Eclipse-Plugin 
installiert, damit läuft auch das kompilieren von C-Programmen ohne 
Fehler. Leider läuft mein AVR aber nicht mit dem was der Kompiler 
ausspuckt. Habe folgendes Programm zum testen geschrieben:
1
#include <avr/io.h>
2
3
int main( void )
4
{
5
  DDRB = (1 << DDB3);   /* PB3 = INPUT */
6
  PORTB |= (1 << PB4);  /* PB4 = 1 (LED aus)*/
7
8
  while ( 1 )
9
  {
10
    if( !(PORTB & (1 << PB3)) ) /* wenn PB3 nicht gesetzt ist */
11
    {
12
      PORTB &= ~(1 << PB4);   /* loesche Bit 4 an PortB */
13
    }
14
    else
15
    {
16
      PORTB |= (1 << PB4);    /* setze Bit 4 an PortB */
17
    } 
18
  }
19
}

An PB3 ist ein Taster nach GND sowie ein Pullup-Widerstand, an PB4 ist 
eine LED mit Vorwiderstand nach +5V. Mit dem Code sollte die LED also 
leuchten wenn der Taster gedrückt ist. Sie leuchtet aber nicht :-(

von Karl H. (kbuchegg)


Lesenswert?

Lukas W. wrote:

>   while ( 1 )
>   {
>     if( !(PORTB & (1 << PB3)) ) /* wenn PB3 nicht gesetzt ist */

     if( !(PINB & (1 << PB3)) ) /* wenn PB3 nicht gesetzt ist */


PORTB   =  Ausgang
PINB    =  Eingang

von Niels H. (monarch35)


Lesenswert?

Lukas W. wrote:

> Das mit dem Makefile hab ich aber nicht verstaden. Was soll da falsch
> sein?

Die Einrückungen sind falsch! Deshalb findet make keine Anweisung um das 
".elf" Zieldatei zu erstellen.
1
# Link: create ELF output file from object files.
2
  .SECONDARY : $(TARGET).elf
3
  .PRECIOUS : $(OBJ)
4
  %.elf: $(OBJ)
5
  @echo
6
  @echo $(MSG_LINKING) $@
7
  $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)

"%.elf:" gehört wie seine .PRECIOUS und .SECONDARY-Zeilen an den 
Zeilenanfang. Das ist wichtig.

Ich nehme an, das das hier nicht der einzige Fehler ist. Daher nochmal 
meine Bitte: lad' dir ein X-Beliebiges Projekt herrunter und nimm dir 
davon das Makefile.

von M. V. (-_-)


Angehängte Dateien:

Lesenswert?

Mega8 Makefile, Ubuntu 7.10 Gutsy, funktioniert sicher

von Lukas W. (Gast)


Lesenswert?

Hey Leute, ihr seit Super!
Mit dem Makefile gehts, hab mir außerdem das mfile-TcL-Script 
installiert, damit geht es nun auch.
Mein kleines C-Beispiel geht mit der kleinen Korrektur auch:
1
#include <avr/io.h>
2
3
int main( void )
4
{
5
  DDRB = ~(1 << PB3);    /* PB3 = INPUT */
6
  PORTB = (1 << PB3) | (1<<PB4);  /* Pullup für PB3 + PB4 = 1 (LED aus) */
7
8
  while ( 1 )
9
  {
10
    if ( PINB & (1<<PINB3) )  /* wenn PB3 gesetzt ist */
11
    {
12
      PORTB |= (1 << PB4);    /* setze Bit 4 an PortB */
13
    }
14
    else
15
    {
16
      PORTB &= ~(1 << PB4);   /* loesche Bit 4 an PortB */
17
    } 
18
  }
19
}

Dann kanns ja richtig losgehen!
Vielen Danke noch mal an alle Helfer,
Gruß

Lukas

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.