Forum: Mikrocontroller und Digitale Elektronik ATTINY11 & AVR-GCC


von Michael L. (eagle87)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich versuche gerade ein erstes Programm für den ATTINY11L zu schreiben 
und bekomme mit dem Befehl
1
make
 folgende Meldung:
1
-------- begin --------
2
avr-gcc (GCC) 4.5.3
3
Copyright (C) 2010 Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.  There is NO
5
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
6
7
8
Compiling: main.c
9
avr-gcc -c -mmcu=attiny11 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 -DF_OSC=1000000 -MD -MP -MF .dep/main.o.d main.c -o main.o 
10
main.c:1:0: error: MCU ‘attiny11’ supported for assembler only
11
In file included from /usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/io.h:423:0,
12
                 from main.c:1:
13
/usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/iotn11.h:51:4: warning: #warning "MCU not supported by the C compiler"
14
main.c:3:2: warning: #warning "F_CPU war noch nicht definiert, wird nun mit 1000000 definiert"
15
make: *** [main.o] Fehler 1

Bedeutet dies dass AVR-GCC nicht für den ATTINY11 geeignet ist, oder 
benötige ich noch irgendeine Include-Datei oder Lib?

Für den ATMEGA8515 konnte ich bereits erfolgreich ein Programm schreiben 
und testen.

Betriebssystem: Ubuntu 12.04
Installiert: AVR-GCC, AVR-LIBC, AVRDUDE
Programmer: STK500

Hoffen das sind alle notwendigen Informationen. Wenn nicht, einfach 
bescheid geben.

Achja noch ne kurze Frage: was ist der Unterschied zwischen F_OSC und 
F_CPU? Beim ATMEGA8515 reicht die Angabe von F_OSC im Makefile, beim 
ATTINY11 nicht. Dieser benötigt die Angabe von F_CPU im C-Code.

Gruß
Michael

: Gesperrt durch Moderator
von holger (Gast)


Lesenswert?

>Bedeutet dies dass AVR-GCC nicht für den ATTINY11 geeignet ist, oder

Genau das bedeutet es. Der ATTiny hat kein RAM, nur Register.

von Ulrich (Gast)


Lesenswert?

Ältere Versionen (so etwa GCC 3.3 ?) sollen die kleine Tinys unterstützt 
haben, aber auch nur mit einigen Einschränkungen.

Wenn es nicht gerade um sehr große Stückzahlen geht - wäre ein etwas 
größerer Chip mit RAM die einfache Alternative.

von Michael L. (eagle87)


Lesenswert?

Schade,
dann muss wohl ein neuer, größerer Controller her. Gibt es irgendwo eine 
Liste welche Controller geeignet sind oder muss ich Datenblätter wälzen? 
Gibt es sonst noch Dinge die ich beachten muss? (Hab mit AVR noch so gut 
wie keine Erfahrungen)

Die Stückzahlen bleiben überschaubar. Vom Preis her kanns also auch ein 
größerer Controller sein. Da gehts mir eher noch um die Abmessungen. 
40-pin PDIP ist manchmal einfach zu groß.

Gibt es eine andere (einfache) Möglichkeit ATTINY's nativ unter Linux zu 
programmieren.

Gruß
Michael

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ulrich schrieb:
> Ältere Versionen (so etwa GCC 3.3 ?) sollen die kleine Tinys unterstützt
> haben, aber auch nur mit einigen Einschränkungen.

Nein, wurden nie unterstützt.

Es gibt irgendwo im Netz einen Hack, mit dem man so einigermaßen
arbeiten kann, wenn's unbedingt sein muss.

Michael L. schrieb:
> dann muss wohl ein neuer, größerer Controller her.

Naja, das eine Kilobyte Flash und die paar Register eines ATtiny11
bekommst du auch mit Assembler gefüllt. ;-)

Allerdings sind die Dinger in jeglicher Hinsicht steinzeitlich.
Nicht nur die CPU-Architektur, auch der Rest.  Außerdem ist er
nur HV-programmierbar.

> Gibt es irgendwo eine
> Liste welche Controller geeignet sind oder muss ich Datenblätter wälzen?

Dafür müsstest du uns deine Anforderungen nennen.

Wenn aber ein ATtiny11 bereits für dich geeignet wäre, dann geht
wohl fast jeder AVR. :)

> Die Stückzahlen bleiben überschaubar.

Dann würde ich keinen ATtiny11 nehmen.  Der einzige Grund für das
Ding wäre wirklich nur der Preis.

> Da gehts mir eher noch um die Abmessungen.
> 40-pin PDIP ist manchmal einfach zu groß.

8pinnige AVRs gibt's wie Sand am Meer, vom schon am Beginn des
Rentenalter stehenden ATtiny13 angefangen.

> Gibt es eine andere (einfache) Möglichkeit ATTINY's nativ unter Linux zu
> programmieren.

Anders als was?

von Michael L. (eagle87)


Lesenswert?

> Naja, das eine Kilobyte Flash und die paar Register eines ATtiny11
> bekommst du auch mit Assembler gefüllt. ;-)
Wenn Assembler würd ich aber gerne auf dem gleichen Controller auch mit 
C programmieren können, um nicht gleich komplett zweigleisig anzufangen. 
Also gleich mit unterschiedlichen Controllern und unterschiedlicher 
Programmiersprache.

>> Gibt es irgendwo eine Liste welche Controller geeignet sind oder muss
>> ich Datenblätter wälzen?
> Dafür müsstest du uns deine Anforderungen nennen.
Das "geeignet" bezog sich auf AVR-GCC.
Ansonsten habe noch keine konkreten Anforderungen da ich mich ersteinmal 
in die Materie einarbeiten muss. Aber für ein mögliches Projekt das ich 
schon im Hinterkopf habe muss ich 2 PWM Signale mit einer Periodendauer 
von 20ms einlesen und 4 PWM Signale (aber nur 2 zur selben Zeit) mit 
einer Frequenz von mehreren kHz ausgeben. 
(Vorwärts-Rückwärts-Drehzahlsteller für 2 DC-Motoren)

> 8pinnige AVRs gibt's wie Sand am Meer, vom schon am Beginn des
> Rentenalter stehenden ATtiny13 angefangen.
Dann gibts nur noch das Problem mit dem Compiler...


>> Gibt es eine andere (einfache) Möglichkeit ATTINY's nativ unter Linux zu
>> programmieren.
> Anders als was?
Äh, ich mein keine andere sondern überhaupt eine Möglichkeit in C. 
AVR-GCC ist ja so wie es aussieht keine Möglichkeit.

von Christian F. (cmf) Benutzerseite


Lesenswert?

Michael L. schrieb:
> Dann gibts nur noch das Problem mit dem Compiler...
>
>
>>> Gibt es eine andere (einfache) Möglichkeit ATTINY's nativ unter Linux zu
>>> programmieren.
>> Anders als was?
> Äh, ich mein keine andere sondern überhaupt eine Möglichkeit in C.
> AVR-GCC ist ja so wie es aussieht keine Möglichkeit.

Nur der Attiny11 wird nicht unterstützt. Andere 8-pinner werden aber 
unterstützt:

13
15
25
45
85

von Michael L. (eagle87)


Lesenswert?

Ok, dann hab ichs falsch verstanden.

> Der ATTiny hat kein RAM, nur Register.
Dachte das wäre auf alle Attiny's bezogen.

Werd wohl erstmal die Datenblätter der genannten Attiny's durchsuchen um 
beim nächsten Kauf etwas passenderes zu bekommen ;)

von Cyblord -. (cyblord)


Lesenswert?

Michael L. schrieb:
> Ok, dann hab ichs falsch verstanden.
>
>> Der ATTiny hat kein RAM, nur Register.
> Dachte das wäre auf alle Attiny's bezogen.
>
> Werd wohl erstmal die Datenblätter der genannten Attiny's durchsuchen um
> beim nächsten Kauf etwas passenderes zu bekommen ;)

Atmel hat auf seiner Webseite eine Liste aller AVRs mit den wichtigsten 
Parametern und zwar schön tabellarisch angeordnet. Fang doch erstmal da 
an.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?


von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael L. schrieb:
> Aber für ein mögliches Projekt das ich
> schon im Hinterkopf habe muss ich 2 PWM Signale mit einer Periodendauer
> von 20ms einlesen und 4 PWM Signale (aber nur 2 zur selben Zeit) mit
> einer Frequenz von mehreren kHz ausgeben.

Dann solltest du dir vor allem die Timerhardware ansehen.  PWM
einlesen klingt nach input capture interrupt, dann musst du noch
klären, ob du den gleichen Timer auch parallel für PWM mit benutzen
kannst.  Das ist im wesentlichen eine Frage der Taktrate und der
Zählweite des Timers.

Wenn beide PWM-Eingägne voneinander unabhängig sind, kann es sich
auch lohnen, über einen Controller pro Kanal nachuzudenken.  Die
Software selbst hat bei alldem ohnehin nicht viel zu tun, also 2 x
ATtiny25 würde es wahrscheinlich schon tun.  (ATtiny13 ist sehr
viel einfacher gestrickt als die neueren ATtiny25...85, den würde
ich mir nur antun, wenn es entweder auch damit alles noch ganz
einfach realisierbar ist oder aber Kostendruck dahinter steckt.)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Der ATtiny11 wird m.W. gar nicht mehr hergestellt. Wenn Reichelt und Co
ihre Lagerbestände verkauft haben, wirst du für Neuentwicklungen sowieso
auf einen anderen Controller umsteigen müssen. Da aber, wie schon
geschrieben wurde, fast jeder aktuelle 8-füßige AVR hardwaremäßig eine
Obermenge zum ATtiny11 darstellt, sollte die Auswahl keine großen
Probleme bereiten. Der ähnlich günstige ATtiny13 wurde ja schon genannt.

Hier ist die Parametertabelle für die ATiny-MCUs auf der Hersteller-
Webseite:

  http://www.atmel.com/PFResults.aspx#%28data:%28area:%27%27,category:%2734864[33180[33086]]%27,pm:!%28%28i:8238,v:!%280,17%29%29,%28i:8394,v:!%280,17%29%29,%28i:8362,v:!%281,28%29%29,%28i:8282,v:!%28%29%29%29,view:table%29,sc:1%29

Eine Liste der von deiner GNU-Toolchain unterstützten MCU erhältst du
folgendermaßen:

Mit
1
avr-gcc --target-help

werden u.a. zwei Listen von unterstützten MCUs ausgegeben, eine für den
C-Compiler und eine für den von diesem verwendeten Assembler. Letztere
ist üblicherweise auch für den Linker gültig.

Bis GCC Versionen bis 4.4 wird nur die Liste für den Assembler/Linker
ausgegeben. Um zu sehen, was der C-Compiler unterstützt, versuchst du,
ein Programm für eine garantiert nicht existierenden MCU zu compilieren:
1
avr-gcc -mmcu=x dummy.c

Die Fehlermeldung enthält die gewünschte Liste.

Dann schaust du noch nach, welche MCUs deine AVR-Libc unterstützt: Im
Include-Verzeichnis gibt es für jeden Typ eine Datei namens io*.h. Der *
steht für den abgekürzten MCU-Namen, also bspw. "tn13" für ATtiny13.

Jetzt musst du nur noch die Schnittmenge der drei Listen (C-Compiler,
Assembler/Linker und AVR-Libc) bilden, dann weißt du, was alles geht.

Wenn du schon eine bestimmte MCU ins Auge gefasst hast, kannst du
natürlich auch einfach prüfen, ob du ein Testprogramm für diese MCU
fehlerfrei bauen kannst.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> Die Fehlermeldung enthält die gewünschte Liste.

Das ist zwar korrekt, aber es geht auch einfacher "über den Daumen".

Außer den "prähistorischen" AVRs (AT90S1200, ATtiny11, ATtiny12)
unterstützt der Compiler nahezu alle AVRs, die es gibt.  Für die
ganz neuen "tiny tinys" (ATtiny4, 5, 9, 10, 20, 40) mit dem
reduzierten CPU-Kern gibt's Patches bislang nur von Atmel, die sich
aber in freier Wildbahn als nicht gerade sehr stabil erwiesen haben,
insofern sollte man wohl von der Benutzung des C-Compilers für diese
Controller vorerst abraten.

Alle anderen 8-bit-AVRs werden unterstützt, bei einigen mit dem Suffix
"A" muss man diesen für das Compilieren ggf. weglassen (aus Sicht des
Programmierers sollten sich A- und nicht-A-AVRs nicht unterscheiden).

von Michael L. (eagle87)


Lesenswert?

Mit
1
avr-gcc --target-help
 bekomme ich nur mögliche Parameter für Assembler und Linker und eine 
Liste bekannter MCU's. In der Liste ist auch der ATtiny11 enthalten. 
Also hilft das leider nichts.
1
avr-gcc -mmcu=x dummy.c
 verweist lediglich auf den Befehl
1
avr-gcc --target-help

> Wenn du schon eine bestimmte MCU ins Auge gefasst hast, kannst du
> natürlich auch einfach prüfen, ob du ein Testprogramm für diese MCU
> fehlerfrei bauen kannst.
Ich werd wohl erstmal anhand der Tabellen eine grobe Vorauswahl treffen, 
dann damit testen ob er unterstützt wird und danach nochmal genauer ins 
Datenblatt schauen.

Danke für die Tipps.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Michael L. schrieb:
> Mit
> avr-gcc --target-help
> bekomme ich nur mögliche Parameter für Assembler und Linker
> und eine Liste bekannter MCU's.
> In der Liste ist auch der ATtiny11 enthalten.

Ja, weil der Compiler den ATtiny11 kennt — allerdings nur, um zu bei 
Verwendung zu meckern, daß der lediglich per Assembler unterstützt wird 
:-)

Einen Überblick über die ca 200 unterstützen Derivate gibt die GCC-Doku, 
hier für 4.7.1:

http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/AVR-Options.html

Diese Liste ist komplett und vollständig da aus den Compilerquellen 
automatisch erzeugt.

Ältere Dokumentationen bis für 4.6 sind leider nicht so akribisch...

von Yalu X. (yalu) (Moderator)


Lesenswert?

Michael L. schrieb:
> Mit
>
> avr-gcc --target-help
>
> bekomme ich nur mögliche Parameter für Assembler und Linker und eine
> Liste bekannter MCU's. In der Liste ist auch der ATtiny11 enthalten.
> Also hilft das leider nichts.

Mist, das habe ich nicht überprüft. Ich habe nur gesehen, dass die Liste
für Assembler mehr Namen enthält als die für den C-Compiler. Faulerweise
habe ich aber nicht nachgeschaut, welche Namen in der C-Liste fehlen.

Ein wenig blöd finde ich das aber schon, dass die Listen die bekannten
und nicht die wirklich unterstützten MCUs enthalten. Was nützt es zu
wissen, welche MCU-Namen in irgendeinem internen Array des Compilers
stehen, wenn sie sich bei näherem Hinsehen als Dummy-Einträge entpuppen?
Immerhin weiß der Compiler ja, dass er mit MCUs wie dem ATtiny11 nichts
anfangen kann, warum gibt er dieses Wissen bei --target-help nicht
einfach preis?

von Peter D. (peda)


Lesenswert?

Michael L. schrieb:
> Schade,
> dann muss wohl ein neuer, größerer Controller her.

Es reicht völlig, wenn man einen AVR nimmt, der auch beschaffbar ist.

Die ATtiny11, 12, 15 werden ja schon lange nicht mehr hergestellt. Sie 
waren auch nur sehr kurz verfügbar, sodaß einfach kein Bedarf bestand, 
sie zu implementieren.

Die Nachfolger ATtiny13, 25, 45, 85 kann der AVR-GCC in C.


Peter

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.