Forum: Mikrocontroller und Digitale Elektronik mal wieder ein neuer


von Gerhard G. (xjrler)


Lesenswert?

guten abeend AVR gemeinde,

ich habe mich bisher noch nicht mit AVR´s beschäftigt wollte aber für 
meinen röhrenverstärker eine Anzeige für verschiedene betriebsdaten wie 
anodenströme, lautstärkeeinstellung mittels vcd display anzeigen.
zur ansteuerung dieser sollten sich diese dinger ja eigentlich perfekt 
eignen, wobei ich mir nach den ersten erfahrungen nicht mehr sicher bin 
ob ich mir das antun soll.
nun aber genung  da komme ich auch schon zu meinem problem.
ich habe mir bei der firma myavr ein lpt board mit atmega 8l gekauft und 
zusammangabaut.
zu beginn hatt ich kommunikationsprobleme welche durch biosumstellung 
der lpt schnittstelle  gelöst werden konnten.
danach habe ich win avr installiert bekomme aber keine kommunikation mit 
dem board zustande

beim win avr habe ich folgende einstellungen vorgenommen
- im make file den prozessor angepasst (atmega 8)
- im make file die lpt1 eingestellt (funktioniert mit myavr auch)
- das make file ist im selben verzeichniss wie das "neue" projekt 
kopiert
- den projektcode im winavr ins "programmers notepad" kopiert und mit 
make all versucht es in den avr zu bekommen
- eigentlich alle verschiedene einstellungen für das "board" ausprobiert 
(stk200, stk500.........................................)

die fehlermedlung im output fenster ist immer

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221rc1)
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.exe: *** No rule to make target `main.elf', needed by `elf'.  Stop.

> Process Exit Code: 2
> Time Taken: 00:02

vielleicht hat jemand von euch eine idee

lgg

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Willkommen

> make all

Übersetzt nur den Quelltext und bereitet daraus die zu übertragende 
HEX-Datei vor.

> make.exe: *** No rule to make target `main.elf', needed by `elf'.  Stop.

Wie heisst deine Quelldatei. Sie muss wahrscheinlich unter main.c 
abgespeichert werden. Genaueres könnte man sagen, wenn man sich die 
Datei Makefile ansieht (das nächste Mal bitte anhängen).

Das eigentliche Programmieren kann man aus PN heraus mit

make program

machen. Allerdings muss das makefile davor an den verwendeten Programmer 
(z.B. sp12 auf dem myavr-lpt-1,52 Board) angepasst worden sein.

Wie diese Anpassung vorzunehmen ist, kann man bei myavr.de erfahren.

Grundsätzlich unterstützt myavr die Programmiersoftware AVRDUDE die im 
WinAVR Paket enthalten ist. Nur die genaue Kommandozeile ist halt 
anzupassen.

Ich schätze dieses PDF Seite 8 hilft weiter:
http://www.myavr.de/download/techb_myavr_board_lpt.pdf

Darin ist diese Beispielkommandozeile angegeben:
avrdude.exe -p Attiny12 -e -c sp12 -U:flash:w:"test.hex":i -P lpt1

Was welches Argument bedeutet, sieht man in der AVRDUDE Doku,

von Gerhard G. (xjrler)


Angehängte Dateien:

Lesenswert?

danke für die rasche hilfe - komme aber trotdem nicht weiter

ich möchte die myavr software nicht benutzen weil ich nur die demo 
version habe und nach einer halben stunde dauernd meldungen kommen daher 
dachte ich winavr wäre die beste alternative.

weil ich im i net gelesen habe das aktuelle winavr versionen tw nicht 
funktionieren habe ich version winavr 2006 01 25 installiert
bekomme dabei aber auch folgende fehler


> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.5
Copyright (C) 2004 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE 
ZWECKE.

g++    -c -o main.o main.cc
process_begin: CreateProcess((null), g++ -c -o main.o main.cc, ...) 
failed.
make (e=2): Das System kann die angegebene Datei nicht finden.

make.exe: *** [main.o] Error 2

> Process Exit Code: 2
> Time Taken: 00:01


ich habe folgendes patch file geschrieben
""avrdude.exe -p ATmega8 -e -c sp12 -C avrdude.conf -e -i -P lpt1""
um das zeug nicht immer eingeben zu müssen


die Datei avrdude.conf habe ich wie folgt angepasst.

programmer
#       id       = "sp12";          # <idN> are quoted strings
#       desc     = "Steve Bolt's Programmer";       # quoted string
#       type     = par;            # programmer type
#       baudrate = <num> ;                          # baudrate for 
avr910-programmer
#       vcc      = 4,5,6,7,8;          # pin number(s)
#       reset    = 3;                          # pin number
#       sck      = 2;                          # pin number
#       mosi     = 9;                          # pin number
#       miso     = 11;                          # pin number
#       errled   = <num> ;                          # pin number
#       rdyled   = <num> ;                          # pin number
#       pgmled   = <num> ;                          # pin number
#       vfyled   = <num> ;                          # pin number
#     ;
#

die projektdatei und das aktuelle make file habe ich im selben 
verzeichnis
der name des projektes ist main.cc


ist sicher ein bedienerfehler, aber vielleicht hat jemand weitere ideen

lgg

von Gerhard G. (xjrler)


Angehängte Dateien:

Lesenswert?

ich glaube nun der verweis auf die programmdatei gefunden zu haben, und 
habe im make file die dateieindung auf cc angepasst.

""# List C source files here. (C dependencies are automatically 
generated.)
SRC = $(TARGET).cc""


nun kommt nicht mehr die meldung "kann angegeben datei nicht finden" 
sondern

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.5
Copyright (C) 2004 Free Software Foundation, Inc.
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
gibt KEINE Garantie; auch nicht für VERKAUFBARKEIT oder FÜR SPEZIELLE 
ZWECKE.


Linking: main.elf
avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall 
-Wstrict-prototypes -Wa,-adhlns=main.cc  -std=gnu99 -MD -MP -MF 
.dep/main.elf.d main.cc --output main.elf -Wl,-Map=main.map,--cref 
-lm
cc1plus.exe: Warnung: Kommandozeilenoption "-Wstrict-prototypes" ist 
gültig für C/ObjC, aber nicht für C++
cc1plus.exe: Warnung: Kommandozeilenoption "-std=gnu99" ist gültig für 
C/ObjC, aber nicht für C++
main.cc:1: Fehler: expected unqualified-id vor »+«-Zeichen
main.cc:2: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:2: Fehler: verirrtes »\252« im Programm
main.cc:3: Fehler: expected unqualified-id vor »+«-Zeichen
main.cc:4: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:4: Fehler: verirrtes »\246« im Programm
main.cc:5: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:6: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:7: Fehler: expected unqualified-id vor »+«-Zeichen
main.cc:8: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:9: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:10: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:11: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:11:13: zu viele Dezimalpunkte in Zahl
main.cc:12: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:13: Fehler: expected unqualified-id vor »|«-Zeichen
main.cc:13: Fehler: verirrtes »\228« im Programm
main.cc:14: Fehler: expected unqualified-id vor »+«-Zeichen
main.cc:16: Fehler: expected unqualified-id vor »--«-Zeichen
main.cc:17: Fehler: expected constructor, destructor, or type conversion 
vor »&&«-Zeichen
main.cc:17: Fehler: expected constructor, destructor, or type conversion 
vor ».«-Zeichen
main.cc:18: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:19: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:20: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:21: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:22: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:23: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:24: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:25: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:26: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:27: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:28: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:29: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:30: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:31: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:32: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:33: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:34: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:35: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:35: Fehler: verirrtes »\178« im Programm
main.cc:36: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:37: Fehler: expected unqualified-id vor »--«-Zeichen
main.cc:38: Fehler: expected constructor, destructor, or type conversion 
vor »,«-Zeichen
main.cc:38: Fehler: expected constructor, destructor, or type conversion 
vor "ON"
main.cc:42: Fehler: »Init« bezeichnet keinen Typ
main.cc:43: Fehler: »PORTD« bezeichnet keinen Typ
main.cc:45: Fehler: »alle« bezeichnet keinen Typ
main.cc:48: Fehler: expected unqualified-id vor numerischer Konstante
main.cc:49: Fehler: expected unqualified-id vor »--«-Zeichen
main.cc:51: Fehler: »wait« bezeichnet keinen Typ
main.cc:53: Fehler: »wait« bezeichnet keinen Typ
main.cc:55: Fehler: »Lauflicht« bezeichnet keinen Typ
main.cc:57: Fehler: expected unqualified-id vor »--«-Zeichen
main.cc:58: Fehler: expected constructor, destructor, or type conversion 
vor »-«-Zeichen
main.cc:59: Fehler: »Ausgabe« bezeichnet keinen Typ
main.cc:60: Fehler: verirrtes »\252« im Programm
main.cc:60: Fehler: »R« bezeichnet keinen Typ
main.cc:61: Fehler: expected unqualified-id vor »--«-Zeichen
make.exe: *** [main.elf] Error 1

> Process Exit Code: 2
> Time Taken: 00:03


das program ist im anahng

lgg

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> ich glaube nun der verweis auf die programmdatei gefunden zu haben, und
> habe im make file die dateieindung auf cc angepasst.

Also vom Regen in die Traufe... mach das wieder rückgängig.

.cc sind Quelldateien für die Sprache C++ und den Kompiler G++. Das 
willst du nicht haben, siehe die vielen Fehler bei den beiden neuen 
Kompilierversuchen.

Das Makefile sieht OK aus. Die Quelldatei wird dort in diesen beiden 
Zeilen definiert:

TARGET = main
SRC = $(TARGET).c

Somit ist main.c der korrekte Quelldateiname.

Mein Kompilierversuch mit deinen Dateien endet in einer langen 
Fehlerliste.
Der Grund ist klar: Es handelt sich überhaupt nicht um einen 
C-Quelltext. Dein main.c ist ein Assembler-Quelltext!

Teste mal diese main.c für dein Blinklicht:
1
#include <avr/io.h>
2
3
#define NOSIM 1
4
5
int main(void)
6
{
7
  unsigned char r16;
8
  unsigned char r17;
9
  unsigned char r18;
10
11
  //  ldi  r16,0b11111111  ;PORTD auf Ausgang
12
  //  out  DDRD,r16
13
  r16 = 0xFF;
14
  DDRD = r16;
15
16
  //   ldi  r16,0b00000000  ;alle Bits auf Low
17
  //   out  PORTD,r16
18
  r16 = 0;
19
  PORTD = r16;
20
21
  //  ldi  r17,0b00000000
22
  //  ldi  r18,0b00000001  ;1 Lauflicht-Bit
23
  r17 = 0;
24
  r18 = 1;
25
26
  // mainloop:
27
  //    wdr
28
  do
29
  {
30
    //  inc  r16  ;wait
31
    r16++;
32
33
    //  brne  skip
34
#if NOSIM
35
    if (!r16)
36
#else
37
    if (!(r16 % 2))
38
#endif
39
    {
40
      //  inc  r17  ;wait
41
      r17++;
42
43
      //  brne  skip
44
#if NOSIM
45
      if (!r17)
46
#else
47
      if (!(r17 % 2))
48
#endif
49
      {
50
        //  rcall  run  ;Lauflicht
51
        PORTD = r18;
52
        r18 = (r18 << 1) | ((r18 & 0x80) ? 1 : 0);
53
      }
54
    }
55
  // skip:
56
  //     rjmp  mainloop
57
  } while (1);
58
}

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Gerhard, schonmal drueber nachgedacht C zu verwenden?

von Dieter Bohlen (Gast)


Lesenswert?

Genau, willst du da ASM als C++ kompilieren?!

von Gerhard G. (xjrler)


Lesenswert?

Danke Stefan - funktioniert

lgg

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.