PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVR Einstieg leicht gemacht (statt Basic mit C arbeiten)



jawo3
05.09.2007, 19:00
Hi,
ich habe im RN-Wiki den Artikel "AVR Einstieg leicht gemacht" gelesen und dort wird die Programmierung mit einem ISP-Dongle und der Software Bascom beschrieben. Soweit ich das heraus lesen konnte, ist diese aber nur für Basic geeignet. Ich programmiere bisher ausschließlich in C und wollte daher fragen, ob es eine Alternativsoftware gibt, die etwa genauso funktioniert wie Bascom, nur das man mit C arbeiten kann.

Oder könnte ich auch mit Sub-D arbeiten? Wie müsste ich dann den Stecker mit dem Controller (z.B Atmega32) verbinden?

Cool wäre naütlich auch so etwas wie "AVR Einstieg leicht gemacht (C Programmer Edition)" :-)
Gibt es so etwas?


Vielen Dank
jawo3

damaltor
05.09.2007, 19:07
ob du mit c oder mit basic arbeitest, ist deine sache. man braucht nur einen entsprechenden compiler. mit avrstudio oder winavr könntest du erfolg haben.

vermutlich meinst du mit Sub-D (das bezeichnet nur eine norm, in der serielle und parallele (!) anschlüsse definiert sind) einen seriellen anschluss zum progrmmieren. das geht, im endeffekt sind es bloss kabel zum oc, und die kann man an jedem anschluss anschliessen. jedoch unterstützen die meisten programmiersoftwares nur einen parallelen anschluss. für linuxer: uisp nimmt beides.
wo in niedersachsen wihnst du eigentlich?

jawo3
05.09.2007, 19:19
Das heißt ich könne auch mit der Standart ASURO Software (sprich AVRstudio und diesem Flash Tool) über ISP Daten übertragen oder brauche ich noch zusätzlich Software?

OffTopic: Ich wohne zwischen Hannover und Hildesheim in Sarstedt (bin übrigens auch in der RN-Landkarte)

Vielen Dank

damaltor
05.09.2007, 19:29
mmh ich bin die nächste woche in deepen.. kannst ja mal schauen ob du das findest, ist bei scheeßel.

das flash tool geht nicht. ich glaube man kann mit avrstudio flashen, aber ich weiss es nicht... es gibt aber viel freie software zum flashen. der atmega8l des asuro ist jedoch gesperrt und lässt sich nur über seinen bootloader mit dem flash tool flashen. mit einem neuen prozessor und einem programmieradapter wie beschrieben kannst du jedoch auch flashen. unter linux empfehle ich uisp. für windows gibt es avrp, das bekommst du unter
www.avr-asm-tutorial.net

jawo3
05.09.2007, 20:27
Könntest du mir einen direkten Link zur Datei geben. Ich finde auf der Seite irgend wie nichts, was AVRP heißt :oops:

damaltor
05.09.2007, 21:29
ich habe mich vertan, das programm avrp ist ebenfalls für linux... aber such mal auf der seite. es wird auf die atmel-seite verwiesen, dort gibt es das programm ISP.

ansonsten lade dir PONYPROG runter, das ist ein sehr flexibles und gutes open-source programm.

jawo3
06.09.2007, 14:07
Ich habe mir jetzt mal PoyProg besorgt.

Kann ich dann weiterhin mit .hex Dateien arbeiten, oder braucht der Atmega32 Controller andere Dateien als der vom ASURO?

Wie fange ich am besten mit der Programmierung an, denn ich habe ja für den Prozessor noch keine Libs oder nehme ich die vom ASURO? Wahrscheinlich nicht, oder?

Und wie wandle ich die .c Dateien dann in die .hex Datei um? Kann ich dazu das BatchFile von ASURO nehmen?
Und wie ist das mit den Makefiles?


Vielen Dank
jawo3

Lunarman
06.09.2007, 14:15
Ja, kannst du - der atmega32 nimmt exakt das gleiche wie der mega8.
naja - ich empfehle dir halt dir eigene Libs zu schreiben, du guckst dir die libs vom asuro an und übersetzt die auf deinen Conroller (würde ich dir nicht empfehlen, ist extrem unübersichtlich), also schreib selber. Dafür sind natürlich mehr C-kenntnisse erforderlich als beim proggen des Asuros.
Batchfile? Nope, das macht der Compiler. Also winavr zum Beispiel.
Das makefile brauchst du, um dem Compiler zu sagen was er wie machen soll, kenn ich mich leider nicht so wirklich mit aus. Kein makefile brauchst du bei avrstudio, das macht das irgendwie automatisch. Ein makefile machen kannst du dir mit dem tool MFile das bei Winavr dabei ist. Winavr ist übrigens das programm, das du auch für den Asuro verwendest, also hast du das ja schon, ist mir grad eben aufgefallen.

damaltor
06.09.2007, 14:17
langsam, langsam.

alle avrs akzepieren hex-dateien. schliesse dein isp dongle an, stecke den avr ein, und schau ob ponyprog ihn erkennt. lade am besten igend ine hex datei runter vin der seite und versuche, diese zu flashen. pass auf dass du eine mega32-datei bekommst.

libs sind nur sammlungen vordefinierter funktionnen. die füre den asuro wirst du nichtbrauchen. du solltest dir den gnu c compiler installieren (vermutlich ist er das schn, schliesslich hast du ja für den asuro kompiliert). dann kannst du anstelle des #include "asuro.h" folgendes schreiben:
#include <avr/io.h>
dann solltest du mit dem prozessor arbeiten können.

du musst jetzt noch das makefile ändern: öffne es, und ändere die taktfrequenz und auch den namen des prozessors (suchen...) und entferne alles was mit asuro zu tun hat.

wenn du nun dein erstes programm geschrieben hast, wechsle auf einer konsole (linux) oder einer dosbox (win) in das verzeichnis und gib "make all" ein. dann entsteht (hofentlch) eine hex-datei, welche du mit pony flashen kannst.

beim makefile kann ich dir evtl helfen, ich habe glaube ich noch eins für einen mega32. aber versuchs erstmal selbst.

zum kompilieren muss bevor du make all eingibst,
- der programmcode
- das makefile
beides im gleichen verzeichnis sein.

jawo3
06.09.2007, 18:51
@Lunarman


naja - ich empfehle dir halt dir eigene Libs zu schreiben, du guckst dir die libs vom asuro an und übersetzt die auf deinen Conroller (würde ich dir nicht empfehlen, ist extrem unübersichtlich), also schreib selber. Dafür sind natürlich mehr C-kenntnisse erforderlich als beim proggen des Asuros.
Okay, wenn ich jetzt noch wüsste, wie ich das machen muss...
Hast du vielleicht einen Link zu dem Thema?


Batchfile? Nope, das macht der Compiler. Also winavr zum Beispiel.
Ich meinte diese "make all.bat" die bei den ASURO examples dabei war.
Aber ich glaube ich weiß jetzt schon was ich machen muss. Ich habe über die Console in dem Ordner in dem das .c File und das makefile sind "make all" ausgeführt und die .hex Datei und noch ein paar andere wurden erstellt.


Winavr ist übrigens das programm, das du auch für den Asuro verwendest, also hast du das ja schon, ist mir grad eben aufgefallen.
=D> allerdings


@damaltor


alle avrs akzepieren hex-dateien. schliesse dein isp dongle an, stecke den avr ein, und schau ob ponyprog ihn erkennt. lade am besten igend ine hex datei runter vin der seite und versuche, diese zu flashen. pass auf dass du eine mega32-datei bekommst.
Wie meinst du das mit der mega32-Datei. Ich merke doch gar nichts vom flashen, oder bleibt dann auf dem PC eine Datei zurück?


libs sind nur sammlungen vordefinierter funktionnen. die füre den asuro wirst du nichtbrauchen. du solltest dir den gnu c compiler installieren (vermutlich ist er das schn, schliesslich hast du ja für den asuro kompiliert). dann kannst du anstelle des #include "asuro.h" folgendes schreiben:
#include <avr/io.h>
dann solltest du mit dem prozessor arbeiten können.
Wenn ich die ASURO Libs nicht benutzen kann, dann muss ich ja wohl oder übel eigene Libs erstellen um mir das Programmieren zu vereinfachen.
Hast du eine Anleitung dazu? Und mit welchen Funktionen kann ich während des Programmierens arbeiten? Sowas wie "MotorDir" gibt´s ja dann nicht mehr, oder? Sowas müsste ich dann über die Lib selbst erstellen?


du musst jetzt noch das makefile ändern: öffne es, und ändere die taktfrequenz und auch den namen des prozessors (suchen...) und entferne alles was mit asuro zu tun hat.
Ich habe im WinAVR oRdner unter examples/demo ein makefile und eine C-Datei. Die beiden sehen so aus, als ob sie noch nie was von ASURO gehört hätten. Kann ich die nehmen? In denen steht auch das #include <avr/io.h>.


wenn du nun dein erstes programm geschrieben hast, wechsle auf einer konsole (linux) oder einer dosbox (win) in das verzeichnis und gib "make all" ein. dann entsteht (hofentlch) eine hex-datei, welche du mit pony flashen kannst.
beim makefile kann ich dir evtl helfen, ich habe glaube ich noch eins für einen mega32. aber versuchs erstmal selbst.
zum kompilieren muss bevor du make all eingibst,
- der programmcode
- das makefile
beides im gleichen verzeichnis sein.
Das habe ich mal mit den beiden Datein im besagten exmaple/demo Verzeichnis ausprobiert und es hat ohne Probleme geklappt. Ich frage mich nur gerade, was .map, .srec, .elf, und .lst Dateien sind...
Außerdem wurde noch eine zweite .hex Datei mit dem Namen "demo_eeprom.hex" erstellt. Wozu dienen all diese Dateien?


Ich weiß: Wieder ganz schön viel auf einmal... O:)

Vielen Dank
jawo3

Lunarman
06.09.2007, 19:27
oh cool... naja, will ich mal versuchen, zu antworten.

1: naja... C sollte man doch können... was meinst du warum Ich Basic benutze *rofl* aber es gibt viele C-Tutorials... einfach google benutzen.
2. Wofür das batchfile gut sein soll, konnte ich auch noch nicht ergründen...
3. m32 datei? Oo... naja, dein Programm sollte halt für den Mega32 geschrieben sein und nicht für den mega8... da ist halt doch so einiges anders. Welcher µC es ist, ist halt im makefile angegeben.
4. Jep das musst du, du musst (naja, solltest) dir eigene Libs erstellen. motorDir ist dan nnatürlich futsch... aber kannst du ja selberschreiben! Genau genommen gibt es keine Funktionen, auf die zurückgreifen kannst - nur einige Sachen die in "io.h" und den anderen Headerfiles hinterlegt sind, und das hat nix mit Motoren zu tun, sondern ist dan neher so Input und Output festlegen... also baust du im Grunde dein eigenes Dorf, nicht nur ein Haus. Okay, dummer Vergleich ^^
5: damaltor meint wahrscheinlich das makefile vom asuro, das sollst du ändern.
6: keien AHnung was das jetzt genau sind, irgendwelche Zwischenstufen halt. aber das war jetzt kein selbstgeschriebenes Programm oder? denn demo-eeprom.hex ist halt die hex-version von demo-eeprom.c, die sich wahrscheinlich auch in dem Verzeichnis befindet...
7: jap das IST kompliziert... man kanns aber lernen ^^ hoffe ich zumindest ^^ sonst lern ich das ja nie :P

jawo3
06.09.2007, 19:38
1: naja... C sollte man doch können... was meinst du warum Ich Basic benutze *rofl* aber es gibt viele C-Tutorials... einfach google benutzen.
Ja, wo ich veschiedene C-Tuts finden kann weiß ich. Ich würde aber gerne wissen, wie ich mir eigene Libs erstellen kann. Kann mir da einer weiterhelfen?



5: damaltor meint wahrscheinlich das makefile vom asuro, das sollst du ändern.
Also kann ich jetzt das makefile aus dem example Ordner nehmen oder nicht?


6: keien AHnung was das jetzt genau sind, irgendwelche Zwischenstufen halt. aber das war jetzt kein selbstgeschriebenes Programm oder? denn demo-eeprom.hex ist halt die hex-version von demo-eeprom.c, die sich wahrscheinlich auch in dem Verzeichnis befindet...
Könnte dann vielleicht noch mal bitte jemand antworten, der davon eine Ahnung hat? Dass das Zwischenstufen sind weiß ich, aber wozu dienen die?
Es befindet sich übrigens erst nach dem Ausführen des "make all" Befehls eine demo-eeprom.c und .hex in dem Ordner. Wozu sind die jetzt da?

Und was war dann jetzt mit dem "pass auf dass du eine mega32-datei bekommst. " von damaltor? Wie soll ich das verstehen?


Vielen Dank
jawo3

damaltor
06.09.2007, 20:57
du kannst das makefile nutzen was winavr dir erstellt. oder du benutzt das makefile welches beim asuro dabei ist und passt es an.

mit einer mega32 datei meine ih, dass du kein programm flashen kannst welches für den mega8 übersetzt wurde - schliesslich sind die beiden ja (relativ) unterschiedlich.

wenn d genauso geräte anschliesst wie beim asuro, dann kannst du auch die lib verwenden. macht natürlich meist wenig sinn, eine lib erstellt man meist nicht auf kommando. fang einfach ohne libs an zu programmieren. wenn du eine funktion hast, die du immer wieder brauchst, und die du nicht dauernd neu tippen willst, dann kannst du überlegen, diese in eine library zu packen, die du dann nur noch einbinden musst. solange du noch keine oft benötigten funktonen hast - - - brauchst du auch keine lib um sie zu speichern =)

die anderen dateien die der compiler erstellt hat, sind hilfsdateien. folgende weiss ich:
*.eep : damit wird beim flashen der eeprom beschrieben. im allgemeinen egal, er wird meist gelöscht.
*.map : hat was mit der speicheraufteilung zu tun glaube ich
*.lst : das ist recht interessant. hier siehst du, wie der compiler den code in assembler übersetzt hat. das ist also dein programm in assembler.
*.hex : diese datei wird in den flash speicher geschrieben. das ist dein fertig kompiliertes programm.
*.elf : ich glaube mit dieser datei kann man mit entsprehender software daas programm auf dem pc simulieren;bin mir nicht ganz sicher.

ürigens kannst du mit dem befehl "make clean" das verzeichnis wieder aufräumen; ddann werden alle vom compiler erstellten dateien wieder entfernt. deine quellcodes werden nicht angefasst, aber auch die .hex-datei ist dann wieder weg.

izaseba
06.09.2007, 22:04
Ich würde aber gerne wissen, wie ich mir eigene Libs erstellen kann. Kann mir da einer weiterhelfen?


Was willst Du für Bibliotheken schreiben ?
Bist Du schon mit den ersten LED Blink und Leucht Versuchen fertig ?
Was hast Du jetzt, einen Asuro oder RN-Control ?

damaltor
06.09.2007, 22:32
warte mal bis morgen da gibts welche die dir helfen können. ich arbeite seit 3 monaten mit einem stk200 (und einem at90s8515 =) ) und habe noch keine libs angefangen...

jawo3
07.09.2007, 13:12
@izaseba


Was willst Du für Bibliotheken schreiben ?
Bist Du schon mit den ersten LED Blink und Leucht Versuchen fertig ?
Da ich ja noch keine Libs habe, weiß ich nicht, welche Befehle es gibt, um dem Controller meine "Wünsche zu verdeutlichen". Ich denke ich sollte erstmal die Befehle kennenlernen und daraus dann Libs erstellen.
Nur leider weiß ich nicht mit welchen Befehlen ich arbeiten kann, da ich vorher nur die Libs von ASURO benutzt habe.
Kann mir da wer helfen?


Was hast Du jetzt, einen Asuro oder RN-Control ?
Zur Zeit habe ich einen ASURO, aber ich wollte mir einen Prozessor (ATMega32) kaufen und dann mit einer Grundschaltung anfangen und nacheinander immer mehr Teile anschließen und programmieren.
btw: Wir sind im ASURO Forum :wink:


@damaltor


du kannst das makefile nutzen was winavr dir erstellt. oder du benutzt das makefile welches beim asuro dabei ist und passt es an.

mit einer mega32 datei meine ih, dass du kein programm flashen kannst welches für den mega8 übersetzt wurde - schliesslich sind die beiden ja (relativ) unterschiedlich.
Das verstehe ich jetzt beides.



fang einfach ohne libs an zu programmieren. wenn du eine funktion hast, die du immer wieder brauchst, und die du nicht dauernd neu tippen willst, dann kannst du überlegen, diese in eine library zu packen
Wie oben schon geschrieben liegt das das Problem derzeit daran, dass ich nicht weiß welche Funktionen es gibt. Bisher habe ich für ASURO immer nur mit Lib Befehlen wie MotorDir, StatusLED usw. gearbeitet.


warte mal bis morgen da gibts welche die dir helfen können.
Auf dass sie sich melden... O:)

Vielen Dank
jawo3

damaltor
07.09.2007, 16:09
naja wenn du keine motoren hast, brauchst du auch kein motorspeed, oder? =)

schnapp dir de prozessor, und schliesse ein paar leds an. versuche dann aus dem datenblatt oder mit unserer hilfe, diese einzuschalten. wenn du das geschafft hast, dann schreibe eine funktion dafür (z.B. "LedsEinschalten()" oder so). diese kannst du dann in die lib tun.

eine lib ist nur eine sammlung von häufig benutzten funktionen. ohne funktionen keine lib.

jawo3
07.09.2007, 18:43
schnapp dir de prozessor, und schliesse ein paar leds an. versuche dann aus dem datenblatt oder mit unserer hilfe, diese einzuschalten. wenn du das geschafft hast, dann schreibe eine funktion dafür
Genau das ist ja das Problem. Wie bekomme ich zum Beispiel eine LED zum Laufen. Dazu muss ich ja irgendwie die Ports ansteuern, oder? Aber wie mache ich das? Wenn ich erstmal weiß, wie das geht, dann sollte das erstellen einer Funktion daraus eigentlich kein großes Problem mehr sein. Nur ich weiß halt nicht, was ich programmieren muss, um eine LED zum leuchten zu bringen, einen Motor zu drehen, Taster auszlesen usw. Bei ASURO hatte ich Funktionen, jetzt nicht, also was muss ich jetzt machen?

izaseba
07.09.2007, 19:07
Aber wie mache ich das? Wenn ich erstmal weiß, wie das geht, dann sollte das erstellen einer Funktion daraus eigentlich kein großes Problem mehr sein. Nur ich weiß halt nicht, was ich programmieren muss, um eine LED zum leuchten zu bringen, einen Motor zu drehen, Taster auszlesen usw.
Es gibt keine Befehle dafür, es gibt das Dattenblatt und C pur, sonst nichts.
Les mal das hier http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Wenn Du damit nicht klarkommst, mußt Du Dir Basic besorgen

Gruß Sebastian

jawo3
07.09.2007, 19:14
Oh, sehr schön. Danke!
Dann hätte ich wohl in nächster Zeit erstmal was zu tun...

damaltor
07.09.2007, 19:53
lies das datenblatt in ruhe. ich gebe dir mal ein paar tips. schliesse die led folgendermaßen an:

|------------|>----------[]--------------|
proz.-----led--------widerst.-------masse

und schau im plan im datenblatt nach, welchen pin du benutzt (beispiel: port b, pin 3 -> "PB3")

jetzt musst du
das richtungsregister DDRB
und das pegelregister PORTB
richtig beschreiben. das musst du im datenblatt nachsehen. =)

jawo3
07.09.2007, 20:30
Dann mache ich mich morgen mal an die Arbeit. Für heute ist´s erstmal genug. Ich hatte heute viel zu tun...

Vielen Dank für eure Antworten
jawo3

vklaffehn
07.09.2007, 22:23
Öhm, mal am Rande, bei WinAVR werden durchaus auch Standardbibliotheken mitgelifert, da gibt es irgendwo ein PDF-File, in dem die alle schön beschrieben sind...
MfG Volker

damaltor
07.09.2007, 22:33
stimmt. aber ob in diesen bibliotheken eine funktion ist um genau diese led an einem bestimmten pin einzuschalten bezweifle ich ;)

izaseba
07.09.2007, 22:35
Öhm, mal am Rande, bei WinAVR werden durchaus auch Standardbibliotheken mitgelifert, da gibt es irgendwo ein PDF-File, in dem die alle schön beschrieben sind...
Richtig, sehe hier:
http://www.nongnu.org/avr-libc/user-manual/modules.html

Das hat aber ziemlich wenig mit Wünschen von Javo3 zu tun, er möchte ja

eine LED zum leuchten zu bringen, einen Motor zu drehen, Taster auszlesen usw. Bei ASURO hatte ich Funktionen, jetzt nicht, also was muss ich jetzt machen?

jawo3
07.09.2007, 22:46
Das hat aber ziemlich wenig mit Wünschen von Javo3 zu tun
Ich heiße jawo3, aber du hast recht.

Wie gesagt werde ich mich morgen erst mal an das AVR-GCC-Tutorial machen.

Schönen Abend noch
jawo3

vklaffehn
07.09.2007, 22:46
Oh, das ist wohl wahr....
aber manche Sachen kann er vielleicht doch gebrauchen, sowas wie die delays und sowas, man muß ja nicht gleich 'alles' neu erfinden.... ;-)
MfG
Volker

jawo3
07.09.2007, 23:12
Ich schaue mal wie weit ich komme... :wink:

izaseba
07.09.2007, 23:14
Ich heiße jawo3, aber du hast recht.


8-[ :-s Sorry, war nicht böse gemeint ;-)

Den Link von oben solltest Du Dir auch auf jedem Fall Bookmarken.
Außer delay Funktionen, was schon angesprochen wurde, sind da noch andere nützliche Sachen, wie Stringfunktionen, bin<->ascii Funktionen, Makros für TWI , Flash,EEPROMzugriff Sachen usw. usw.

Gruß Sebastian

jawo3
07.09.2007, 23:24
Okay, mache ich. Danke
Jetzt mache ich aber wirklich Feierabend :-)

jawo3
08.09.2007, 10:06
Ich arbeite mich gerdae durch das AVR-CCC-Tutorial und ich habe eine kleine Frage zum ersten Beispiel Programm:


#include <avr/io.h> // (1)

int main (void) { // (2)

DDRB = 0xff; // (3)
PORTB = 0x03; // (4)

while(1) { // (5a)
/* "leere" Schleife*/; // (5b)
} // (5c)

/* wird nie erreicht */
return 0; // (6)
}

Mit PORTB = 0x03; werden ja die ersten beiden Anschlüsse des PortsB 1.
Was müsste man machen, um z.B die ersten drei Ausgänge einzuschalten?

Wäre es dann PORTB = 0x07; ? Oder bei vier Ports: PORTB = 0x0f; ?
Also dass man in binären Schritten aber in hexadezimaler Schreibweise immer was dazu packt?

Und habe ich das richtig verstanden, dass aktivierte Ausgänge dann 5V liefern und deaktivierte Ausgänge als GND fungieren?

Danke
jawo3

vklaffehn
08.09.2007, 10:45
Moin!
Jau, soweit wohl richtig, jedes Bit von PORTB repräsentiert einen Pin, ist das Bit 1, dann ist der zugehörige Pin high, bei 0 low.
Entweder man ist fit im Umrechnen zwischen den Zahlensystemen, oder man macht das wie hier :http://www.mikrocontroller.net/articles/Bitmanipulation, sonst wird es unübersichtlich, wenn man mal nur Bit 5 und Bit 3 setzen, den Rest aber löschen will.....
MfG Volker

jawo3
08.09.2007, 10:53
Na klasse, dann habe ich das doch verstanden und wie ist das mit:


Und habe ich das richtig verstanden, dass aktivierte Ausgänge dann 5V liefern und deaktivierte Ausgänge als GND fungieren?

vklaffehn
08.09.2007, 10:56
Jau, solange der Port mittels DDRB auf Ausgang gesetzt ist und der µC mit Vcc=5V versorgt wird :-) Ist das zugehörige Bit in DDRB 0, dann wird der interne Pullup-Widerstand des Pins aktiviert, damit man ihn als Eingang gegen GND schalten kann.
MfG Volker

jawo3
08.09.2007, 11:21
Ist ja cool, danke.
Dann arbeite ich erstmal weiter. Wenn ich wieder ´ne Frage habe, hört ihr wieder von mir.

jawo3
08.09.2007, 14:35
Also, da bin ich wieder...^^

Undzwar lese ich gerade wieder in diesem Artikel:
https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht
Da steht unter "Grundschaltung mit Quarz", dass man die Schaltung mit einem Quarz erweitern soll. Leider weiß ich nicht welchen ich mir kaufen soll. Welche Frequenz soll der haben, damit ich ihn an den AtMega32 anschließen kann und dann alles so funktioniert, wie es in der Anleitung geschildert ist?


Vielen Dank
jawo3

damaltor
08.09.2007, 14:43
du kannst jeden quarz (am besten keinen "quarzoszillator"!) zwischen 1 und 16 mhz nehmen. ich arbeite mit 4 mhz, aus dem einfachen grund dass timer und verzögerungsroutinen dann noch recht übersichtlich bleiben.

jawo3
08.09.2007, 14:50
Ich hätte hier einen mit 3Mhz und einen mit 16Mhz rumliegen. Sollte ich dann lieber den 3er nehmen oder den anderen? Was sind Vor-und Nachteile von verschiedenen Frequenzen?

damaltor
08.09.2007, 15:05
je schneller der quarz, desto schneller arbeitet der mega32 =)

mit einem langsamen quarz kann man leichter verzögerungen machen, beispielweise mithilfe des counters. hier könnte man problemlos verzögerungen folgender art herstellen:
takt: 3mhz
prescaler: 1024 --> zähltakt 3 khz
überlauf bei 255 -> interrupt kommt alle zehntelsekunde.
damit lässt sich leicht, aber nicht soo exakt arbeiten. dagegen:
takt 16 mhz
prescaler 1024 -> zähltakt 16 khz
überlauf bei 255 -> interrupt alle 1/60stel sekunde

wenn du zeitkritische anwendungen hast - lieber den schnellen quarz. wenn du lieber schön langsam alles ehen willst, lieber den langsamen. oder du lötst eine steckbuchse ein, dann kannst du den quarz den du grad willst einfach einsetzen.

jawo3
08.09.2007, 15:22
Okay, und müsste ich dann sowas hier in meine Programme einfügen? Das habe ich vorhin mal irgendwo gelesen:


#ifndef F_CPU
#define F_CPU 3000000UL /* Quarz mit 3.0000 Mhz */
#endif


oder du lötst eine steckbuchse ein, dann kannst du den quarz den du grad willst einfach einsetzen
Müsste ich dann irgendwo für die verschiedenen Quarze was anderes eintragen? Zum Beispiel Prog1 läuft mit 3Mhz Quarz und Prog2 mit 16Mhz Quarz, dann müsste ich bei Prog1 irgendwo vermerken, dass mit 3 Mhz gearbeitet wird und ebenso beim 16Mhz Quarz, oder? Ist das zufällig dieses ominöse F_CPU Ding? Wird dann die interne Frequenz zu der Quarz Frequenz dazugezählt oder durch diese ersetzt?


Vielen Dank
jawo3

damaltor
08.09.2007, 15:28
das f-cpu ding kommt glaub ich ins makefile, wenn ich mich recht erinnere.das muss entsprechend angepasst werden.
wenn du den schnellen quarz einsteckst, läuft dein langsames programm schnell - das ist bei einfachen programmen nicht weiter schlimm, jedoch sind alle zeitlich wichtigen anwendungen wie z.B. eine übertragung über infrarot, über rs232, oder auch über i2c oder zeitgesteuertes ein- und ausschalten von dingen nicht mehr funktionstüchtig oder eben viel zu schnell.

den quarz musst du anschliessen, und dann den prozessor entsprechend einstellen. die interne frequenz wird dqann abgestellt, es gilt die des quarzes. wie man das einstellt, steht im tutorial.

du brauchst auch im moment nihct zwingend einen quarz, der mega32 kann selbst taktraten bis zu 16 mhz erzeugen. dazu musst du im datenblatt nachlesen. ein externer quarz ist jedoch etwas genauer, was vor allem für rs232- und ähnliche datenübertragungen recht wichtig ist. zm experimentieren reicht aber auch die interne 16 mhz frequenz, wenn du ein gefühl für die geschwindigkeit bekommen willst.

jawo3
08.09.2007, 15:38
In dem AVR-GCC-Tutorial steht unter anderem folgendes Programm:

#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */
#endif
#include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */
#include <util/delay.h> /* in der aktuellen Version in util/ */


/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}

int main(void)
{
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang (Taster) */
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */
...
if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */
PORTD = PIND ^ ( 1 << PD7 ); /* ..LED an Port PD7 an-
bzw. ausschalten */
...
}
Daraus habe ich das mit dem f_cpu. Kann es sein, dass erst überprüft wird, ob bereits im makefile eine andere Frequenz eingestellt ist (ifndef) und wenn dies nicht der Fall ist programmintern die Frequenz des Quarzes bekannt gegeben wird (define)?

damaltor
08.09.2007, 15:48
an sicch ist es so: du MUSST die frequenz nicht angeben. der prozessor arbeitt so schnell wie er halt kann.

es kann nur deutich einfacher sein, wenn man etwas anderes damit berechnen will.

jawo3
08.09.2007, 16:43
Ist die Angabe der Frequenz für _delay_ms(50) wichtig? Die Funktion muss ja irgendwie wissen, wann 50ms rum sind, oder geht das automatisch?

izaseba
08.09.2007, 16:54
Sagmal liest Du auch alles was man Dir sagt ?
Irgendwie macht es keinen Spaß Leuten helfen zu wollen, die das auch nicht lesen :-s

O.K. Hier nochmal extra für Dich kopiert

Ne Du Dumm ist die Frage nicht...
F_CPU sollte man einstellen,wenn man delay.h benutzt, damit die Zeiten stimmen.
Aber aufpassen, es stellt nichts am µC um, das muß man schon selber per Fuse einstellen.
Die Zeilen für Avrdude sind eigentlich dazu da um mit make program den µC zu beschreiben.
Wenn Du Ponyprog nutzt, kannst Du es ignorieren.

jawo3
08.09.2007, 17:07
Oh, das tut mir natürlich Leid.

Ich probiere gerade soviel wie möglich auf einmal zu verstehen nur manche Begriffe kann ich nicht auf anhieb behalten und in anderen Bereichen wieder anwenden. Und ich bin auch nicht auf die Idee gekommen Bezüge zwischen den beiden Threads herzustellen. :oops:

Aber danke, dass du das nochmal kopiert hast

damaltor
14.09.2007, 12:07
dafür ist eswichtig. so musstdu das nichtselbst ausrechnen, sondern der ccopiler maht es.