PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GCC, Win-AVR? Tutorial?



Spongebob85
29.01.2007, 20:03
Moin!!!
Ich hab mal ne frage zur programmierung mit C.
Ich habe mir ein Dongle gekauft, was an den LPT-Port gesteckt wird und womit ich meinen Microcontroller (ATMega28) über ISP-Anschluß programmieren kann. Hab in so einem Tutorial gesehen wie man eine Programmierschaltung bauen kann und das programmieren ist da anhand von beispielen in Bascom erklährt. Will aber in C programmieren, da ich da wenigstens schon grundkentnisse hab. Win-AVR krieg ich irgendwie nicht mal so konfiguriert, das es meinen Mega28 erkennt. Dann hör ich immer von gcc. Kenn mich nur leider mit nichts Microcontrollerprogrammiermäßigem aus und würde mich auch freuen wenn es irgendein Tutorial geben würde, indem erklährt ist wie ich mit einem Programm (am besten kostenlos) in C programmieren kann.

MfG Jan

SIGINT
29.01.2007, 20:24
Hi Spongebob85,
WinAVR ist nur die Windows-Portierung des/der GCC. Die Gnu Compiler Collection beinhaltet u.a. auch einen C Compiler und ist fuer viele verschiedene Prozessortypen (AVR,ARM,MIPS,x86,etc.,etc.) verfuegbar.
Der AVR-GCC ist echt was feines und fuer Hobbybastler im Bereich AVR ein Muss... BASCOM find ich aber auch wirklich gelungen. Hier gibts ein gutes Tutorial zum GCC:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Gruss,
SIGINT

Spongebob85
30.01.2007, 02:38
Hab mir das grade mal angekuckt. Ich versteh das alles nicht wirklich.
Alleine die Pins als Ein- oder Ausgänge zu setzen...
In Bascom sieht das so aus: Config Portc.0 = Output
Im C-Tutorial sieht das so aus: DDRB = 0xff;
PORTB = 0x03;
Auserdem hab ich immernoch nicht rausgefunden, was ich in WinAVR einstellen muss damit das Prog meinen Controller über mein ISP-Dongle erkennt.
Is das mit C wirklich so kompliziert, oder denke ich mir da wieder mehr Probleme rein als es gibt.

MfG Jan

askazo
30.01.2007, 07:58
Tja, die Befehle von Bascom kannst Du nunmal nicht mit denen von WinAVR vergleichen, bzw. nur sehr bedingt.

Um Dein Beispiel mal aufzugreifen: In Bascom gibt es "Config Portc" als vorgefertigten Befehl, der letztendlich nichts anderes macht, als auf das Register DDRC zuzugreifen und entsprechend zu beschreiben. In WinAVR wird das Register direkt mit Namen angesprochen und der entsprechende Wert zugewiesen.

Zudem musst Du in WinAVR das makefile anpassen.
Falls Du davon noch nichts gehört hast, solltest Du Dich darüber mal informieren.

Was die Programmierung angeht - WinAVR ist ein reiner Compiler - er kann gar nicht programmieren. Das mitgelieferte "Programmers Notepad" hat eine Programmierfunktion drin. Dazu kann ich Dir allerdings keine Hilfe geben, ich benutze zum Programmieren immer AVRStudio mit JTAG ICE bzw. AVRISP. Alternativ gibt es auch noch PonyProg, das kannst Du afaik auch mit Parallelport-Proggern einsetzen.

askazo

carlos_soost
30.01.2007, 10:59
Alleine die Pins als Ein- oder Ausgänge zu setzen...
MfG Jan

das ist nicht so schwer wie es sich anhört...

du nimmst einfach das register von dem port den du nutzen möchtest, sagen wir mal portc. und dann willst du pin6 setzen. siehts als c befehl so aus.

DDRC |=(1<<PC6); damit ist der Pin als Ausgang deklariert.
das ganze macht nichts weiter als eine oder- verknüpfung mit dem wert 1, der einfach an die stelle des pins geschiftet wird.

bissl aufgebröselt sieht das so aus ( wenn wir davon ausgehen das DDRC auf 0 steht)

DDRC = 00000000 ( alte Wert DDRC)
------------- ( oder )
01000000 ( 1<<PB6)

DDRC = 01000000

wenn du dann den pin setzen willst, machst das gleiche nur das du statt DDRC nun PORTC schreiben musst.

Spongebob85
30.01.2007, 14:16
Das is alles echt eigenartig!!!
Wo kommt z.B. DDRC her. Was das mit dem "Oder" auf sich hab hab ich immer noch nicht verstanden. Meist is das doch ne bedingung für irgendwas. Würde das beim Port b DDRB heißen? Wie deklariere ich einen Pin als Eingang? So? DDRB |= (1>>PC6) Was ist mit internen Pullup-/Pulldownwiderständen? Ich werde noch bekloppt ](*,) ](*,)

Hanni
30.01.2007, 15:08
Das is alles echt eigenartig!!!
Wo kommt z.B. DDRC her.

Als "Geheimtip" kann man nur die Lektüre des Datenblattes empfehlen !!

Grüße.

coCo
30.01.2007, 15:13
Wo kommt z.B. DDRC her. Was das mit dem "Oder" auf sich hab hab ich immer noch nicht verstanden. Meist is das doch ne bedingung für irgendwas. Würde das beim Port b DDRB heißen? Wie deklariere ich einen Pin als Eingang? So? DDRB |= (1>>PC6) Was ist mit internen Pullup-/Pulldownwiderständen? Ich werde noch bekloppt


@spongebob85 schau dir doch das Tutorial an, das von SIGINT gepostet wurde. Da wird das alles sehr schön erklärt.

MfG

Spongebob85
30.01.2007, 15:15
Bei diesem Tutorial bin ich ja auf diese ganzen Fragen gestoßen.

coCo
30.01.2007, 15:51
Es wird doch in dem Tutorial erklärt wie man einen Eingang definiert und wie man Pullupwiderstände aktiviert.
Ansonsten kannst du noch bei google nach Bitmanipulation gucken.
Achja und was die einzelnen Register sind, z.B. PORTC, kannst du im Datenblatt deines AVRs nachschaun.

MfG