mikrocontroller.net

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


Autor: Lukas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
$ apt-show-versions | grep avr
avrdude/gutsy uptodate 5.4-1
gdb-avr/gutsy uptodate 6.4.90.dfsg-1
gcc-avr/gutsy uptodate 1:4.2.1-1
avra/gutsy uptodate 1.2.1-1
avr-libc/gutsy uptodate 1:1.4.5-2
binutils-avr/gutsy uptodate 2.17
avrdude-doc/gutsy uptodate 5.4-1
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)
$ 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
test.asm:4: Error: constant value required
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.
$ make all

-------- begin --------
avr-gcc (GCC) 4.2.1
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make: *** Keine Regel vorhanden, um das Target »main.elf«,
  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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Düsentrieb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich benutze avra...
und als programmer sp12
funzt .

Autor: Lukas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>

int main( void )
{
  DDRB = (1 << DDB3);   /* PB3 = INPUT */
  PORTB |= (1 << PB4);  /* PB4 = 1 (LED aus)*/

  while ( 1 )
  {
    if( !(PORTB & (1 << PB3)) ) /* wenn PB3 nicht gesetzt ist */
    {
      PORTB &= ~(1 << PB4);   /* loesche Bit 4 an PortB */
    }
    else
    {
      PORTB |= (1 << PB4);    /* setze Bit 4 an PortB */
    } 
  }
}

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 :-(

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht 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.
# Link: create ELF output file from object files.
  .SECONDARY : $(TARGET).elf
  .PRECIOUS : $(OBJ)
  %.elf: $(OBJ)
  @echo
  @echo $(MSG_LINKING) $@
  $(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.

Autor: M. V. (-_-)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mega8 Makefile, Ubuntu 7.10 Gutsy, funktioniert sicher

Autor: Lukas W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>

int main( void )
{
  DDRB = ~(1 << PB3);    /* PB3 = INPUT */
  PORTB = (1 << PB3) | (1<<PB4);  /* Pullup für PB3 + PB4 = 1 (LED aus) */

  while ( 1 )
  {
    if ( PINB & (1<<PINB3) )  /* wenn PB3 gesetzt ist */
    {
      PORTB |= (1 << PB4);    /* setze Bit 4 an PortB */
    }
    else
    {
      PORTB &= ~(1 << PB4);   /* loesche Bit 4 an PortB */
    } 
  }
}

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

Lukas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.