Forum: Mikrocontroller und Digitale Elektronik fertige librarys


von andi (Gast)


Lesenswert?

so,
da ich mich gerade auch mehr mit dem programmieren unterschiedlicher avr 
mikrocontroller beschäftige und demnächst mit dem stk500 programmieren 
bin ich gerade auf der suche für standardlibraries für die gängigen avr 
µCs.

gibt es so etwas hier irgendwo im forum oder sonst wo? ihr werdet ja 
wohl wahrscheinlich nicht immer komplette libs selber schreiben. die 
suchmaschine hat mir leider bisher nicht weitergeholfen.

mfg

von Floh (Gast)


Lesenswert?

andi schrieb:
> standardlibraries für die gängigen avr
> µCs.

Definiere standardlibraries.

Für den anfänglichen Gebrauch braucht man keine Library.
Die werden erst sinnvoll, wenn man externe Geräte am AVR wie z.B. ein 
Display betreibt oder I2C-DEvices anspricht.
:-)

von andi (Gast)


Lesenswert?

ich meinte die standardsachen, wie portdefinition, taktfrequenz, usw., 
wie sie normalerweise in der header lib definiert werden. das gibt es 
doch bestimmt bereits irgendwo als fertige datei, oder?

gruß

von spess53 (Gast)


Lesenswert?

Hi

Für Assembler: ...def.inc.

MfG Spess

von Thilo M. (Gast)


Lesenswert?

Beim AVR-GCC sind die Headerdateien für alle AVRs dabei.
Als 'include' - Dateien.
Ich denke, das sind die, die du meinst.

von andi (Gast)


Lesenswert?

ich dachte eigentlich eher an C programmierung. des assemblers bin ich 
leider nicht mächtig^^^.

mfg

von Floh (Gast)


Lesenswert?

du bindest halt "avr/io.h" ein und dann hast du alle Portdefinitionen, 
kannst also z.B. so was im Programm schreiben
...
PORTB = (1<<PB7);
...

von andi (Gast)


Lesenswert?

ja genau das meine ich. und wo find ich das avr/io.h hier genau? hab 
gerade schon gesucht aber nichts hier gefunden.

mfg

von roflkopter (Gast)


Lesenswert?


von Thilo M. (Gast)


Angehängte Dateien:

Lesenswert?

Die findest du nach der Installation von WinAVR in dem im Bild 
angegebenen Pfad.

von andi (Gast)


Lesenswert?

danke für eure hilfe, hatte auf meinem laptop winavr ja bereits 
installiert, da ich ja bereits mit dem RP6 von Conrad längere zeit 
beschäftigt habe.

jetzt habe ich mal die header datei aus dem winavr ordner für den 
atmega32 mit der header datei für den atmega32 des RP6, welche ich 
bisher ja immer verwendet habe verglichen.

und da muss ich sagen, dass die header datei aus dem winavr ordner 
bereits vollständig ist für ein erstes testprogramm? zum beispiel finde 
ich nirgends etwas, wo die taktfrequenz eingestellt wird.

zusätzlich würde mich interessieren, ob ich noch eine C- datei als lib 
erzeugen muss, bevor ich mit dem progammieren eines C- programms starte 
oder ob die headerlib in verbindung mit einem C- programm bereits 
ausreicht?


zur begründung: da ich ja bisher nur den RP6 programmiert habe, wo 
bereits alles "programmierfertig" ist, möchte ich jetzt komplett selber 
einsteigen. daher benötige ich ein paar zusatzinformationen.

mfg

von Dirk (Gast)


Lesenswert?

Bitte wirf auch einen Blick in das AVR-GCC Tutorial:

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

von Hc Z. (mizch)


Lesenswert?

andi schrieb:
> zusätzlich würde mich interessieren, ob ich noch eine C- datei als lib
> erzeugen muss, bevor ich mit dem progammieren eines C- programms starte
> oder ob die headerlib in verbindung mit einem C- programm bereits
> ausreicht?

Es ist mir völlig unklar, was Du meinst.  Eine „Headerlib“ muss z.B. 
sowas wie eine „Apfelorange“ sein, denn in C gibt es Header und 
Libraries, aber das sind verschiedene paar Schuhe, deren Kombination in 
einem Wort keinen Sinn ergibt.

Vielleicht beschreibst Du einfach, was du wie machen willst, und worin 
dort Deine Probleme liegen, statt nach „headerlibs“ zu suchen.

von Thilo M. (Gast)


Lesenswert?

Die Taktfrequenz kannst du im Makefile 'einstellen' (definieren).
Zum Erstellen des Makefiles gibt es das Hilfsprogramm 'MFile'.

Du musst keine weiteren Libs erstellen, einfach losprogrammieren. ;)
Welche fertigen Libs du für was einbinden musst findest du in der mit 
dem WinAVR installierten 'avr-libc Manual'. Dort findest du alles was du 
brauchst, speziell in Sachen Syntax und Zahlenformate.

von Karl H. (kbuchegg)


Lesenswert?

Thilo M. schrieb:
> Die Taktfrequenz kannst du im Makefile 'einstellen' (definieren).
> Zum Erstellen des Makefiles gibt es das Hilfsprogramm 'MFile'.

Wobei man aber auch sagen muss, dass die 'Einstellung' der Taktfrequenz 
für den Compiler informellen Character hat.
Der AVR (MegaXX) arbeitet mit der Taktfrequenz, die ihm Quarz bzw. 
interner Taktgenerator bzw. Fusebits vorgeben.

In dem Sinne ist das keine 'Einstellung', dass man im Makefile auswählt, 
welche Taktfrequenz man haben will, sondern genau anders rum: Da der 
Compiler die Taktfrequenz nicht wissen kann, muss man sie ihm mitteilen.

von andi (Gast)


Lesenswert?

so, da nun die prüfungen vorbei sind kann ich mich nun endlich richtig 
an mein projekt machen. ihr habt mir ja schon den ein oder anderen tipp 
dazu gegeben, vor allem im bezug auch die "headerlib" ^^. ich glaube wir 
können uns jetzt darauf einigen es headerdatei zu nennen.
ich habe mir auch mittlerweile im winavr ordner diverse headerdateien 
angeschaut.

nun zu meinem projekt:
ich möchte aus einem alten tennisball einen elektronischen hundeball 
bauen. dieser soll mit einem led-lauflicht (leds stecken in 
durchgebohrten löchern), einem beschleunigungssensor und evtl noch mit 
einem piezo summer ausgestattet werden.
mein ziel ist es, mit dem beschleunigungssensor die momentane 
beschleunigung zu messen und proportional dazu mit pwm die hellichkeit 
der leds zu verändern.

kann mir jemand hierzu einen möglichst billigen beschleunigungssensor 
empfehlen? die anforderungen an ihn sind in meinem fall ja nicht all zu 
hoch.

ich hab auch schon ein wenig gesucht und bin dabei auf diesen hier 
gestoßen:

http://www.watterott.com/de/Breakout-Board-MMA7260QT

hier das datenblatt:
http://www.sparkfun.com/datasheets/Accelerometers/MMA7260Q-Rev1.pdf

da in einem tennisball nur sehr begrenzter platz vorhanden ist, ist es 
außerdem nicht ganz einfach eine geeignete spannungsquelle zu finden. 
moment tendiere ich dazu, 2 mignonzellen in reihe zu schalten und so mit 
der betriebsspannung 3V zu arbeiten.
da diese allerdings schon fast zu groß sind, wäre ich sehr dankbar, wenn 
mir hier im forum jemand eine geeignetere alternative vorschlagen 
könnte.
vielleicht wären ja auch knopfzellen eine alternative...

als controller hab ich jetzt mal den attiny24V ins auge gefasst. dieser 
kann laut datenblatt mit einer betriebsspannung von 1,8- 5,5V betrieben 
werden und verfügt über 12 I/O- ports, von welchen ich 6 I/O für den 
beschleunigungssensor verwenden werde.

nun zurück zum eigentlichen thema (thema des threads):

da es mein erstes projekt ist, wo ich einen "nicht vorprogrammieren µC" 
verwende, hab ich jetzt noch einige grundsätzliche fragen zur 
programmierung:

- die headerdatei für meinen controller, in meinem fall wohl die iotn24 
und iotnx4, befinden sich ja bereits im winavr ordner. kann ich diese 
unverändert verwenden?

- wenn ich mit dem programmieren meines C- programms beginne, habe ich 
bisher (RP6) immer zu aller erst mit include.... etwas eingebunden.
muss ich das jetzt auch machen? bzw. was muss ich jetzt hinter 
include... schreiben?

- kann bzw. muss ich die taktfrequenz des µCs (hier 10MHZ) zu beginn 
meines programms definieren? so weit ich sehen konnte, wird das in der 
headerdatei nicht gemacht.

- welches makefile aus dem mfile ordner von winavr muss ich nehmen?


vielen dank schon mal im voraus für die beantwortung meiner fragen


mfg andi

von andi (Gast)


Lesenswert?

update: jetzt hab ich mich mal nochmal im GCC tutorial schlau gemacht. 
kann es sein, dass ich mit dem programm so

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#ifndef F_CPU
#define F_CPU 10000000
#endif


starten muss?

gruß andi

von Karl H. (kbuchegg)


Lesenswert?

andi schrieb:

> da es mein erstes projekt ist, wo ich einen "nicht vorprogrammieren µC"
> verwende, hab ich jetzt noch einige grundsätzliche fragen zur
> programmierung:
>
> - die headerdatei für meinen controller, in meinem fall wohl die iotn24
> und iotnx4, befinden sich ja bereits im winavr ordner. kann ich diese
> unverändert verwenden?

Die greifst du gar nicht an.
Du
a) gibst bei der Erstellung des Projekts im AVR-Studio an, welchen
   Prozessor du benutzt und inkludierst immer
   #include <avr/io.h>

   Das dann im io.h die für deinen Prozessor passende tatsächliche
   ioXXX.h inkludiert wird, ist alles schon erledigt. Darum musst du
   dich nicht kümmern.

b) stellst bei der Projektgenerierung den richtigen Prozessor ein

> - wenn ich mit dem programmieren meines C- programms beginne, habe ich
> bisher (RP6) immer zu aller erst mit include.... etwas eingebunden.
> muss ich das jetzt auch machen? bzw. was muss ich jetzt hinter
> include... schreiben?

#include <avr/io.h>

damit hast du erst mal alle Basisdfinitionen für deinen Prozessor 
inkludiert.

> - kann bzw. muss ich die taktfrequenz des µCs (hier 10MHZ) zu beginn
> meines programms definieren? so weit ich sehen konnte, wird das in der
> headerdatei nicht gemacht.

Entweder so, oder aber du gehst im AVR-Studio in den 'Project' / 
'Configuration Options' Dialog und stellst dort die Taktfrequenz ein. 
Das ist die bevorzugte Variante

> - welches makefile aus dem mfile ordner von winavr muss ich nehmen?

WEnn du AVR-Studio benutzt, musst du dich um gar kein Makefile kümmern. 
AVR-Studio erstellt eines für dich.

von Karl H. (kbuchegg)


Lesenswert?

andi schrieb:
> update: jetzt hab ich mich mal nochmal im GCC tutorial schlau gemacht.
> kann es sein, dass ich mit dem programm so
>
> #include <avr/io.h>
> #include <util/delay.h>
> #include <avr/interrupt.h>
>
> #ifndef F_CPU
> #define F_CPU 10000000
> #endif
>
>
> starten muss?

Definiere 'muss'

Verwendest du etwas aus 'delay.h'? Wenn je, dann musst du es 
inkludieren. Verwendest du nichts davon, dann nicht.
Verwendest du zur Zeit Interrupts? Wenn ja, dann brauchst du 
interrupt.h. Wenn nein, dann nicht.

Das einzige Header File, welches man mehr oder weniger inkludieren 
'muss', ist io.h.
Theoretisch braucht man auch das nicht, wenn das Programm so aussieht
1
int main()
2
{
3
  while( 1 )
4
    ;
5
}

Da aber ein auf einem AVR laufendes Programm ohne Portzugriffe nicht 
auskommen wird, ist io.h mehr oder weniger Pflicht für das einfachst 
mögliche, auf einem AVR sinnvolle, Minimalprogramm
1
#include <avr/io.h>
2
3
#define LED_PORT  PORTB
4
#define LED_DDR   DDRB
5
#define LED_PIN   PB1
6
7
int main()
8
{
9
  LED_DDR = ( 1 << LED_PIN );
10
  LED_PORT = ( 1 << LED_PIN );
11
12
  while( 1 )
13
    ;
14
}

wobei man LED_PORT und die restlichen #define noch anpassen muss, wo 
denn genau am AVR externe Hardware hängt, mit der sich der AVR bemerkbar 
machen kann.

von andi (Gast)


Lesenswert?

vielen dank karl heinz für deine hilfe. ich glaube jetzt habe ich die 
wichtigsten grundlagen für einen programmeinstieg verstanden.

mfg

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.