Microcontroller programieren

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 21 12 2025  13:02:15      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 )      


Autor
Microcontroller programieren

    







BID = 575899

ffeichtinger

Schreibmaschine



Beiträge: 1050
Wohnort: Traunkirchen im Salzkammergut
 

  


Na, das ist doch schon was. Wenn du schon so gut programmieren kannst wird für dich das Programmieren eines Microcontrollers ein Kinderspiel!

Du hast alles was man braucht: Datentypen, Verzweigungen, Schleifen, Funktionen.

Jetzt sieh dir mal dieses Programm an, das ist ein typisches Programm für einen Microcontroller in C. Es ist für einen ATmega16 und lässt einfach nur LEDs die an PORTA angeschlossen sind blinken. Es ist oft nicht schlecht so ein Programm zu haben, wenn die Programme und die Hardware immer komplizierter werden und plötzlich gar nichts mehr funktioniert, spielt man dieses Programm auf um zu überprüfen ob man den µC schon abgeschossen hat.

Übrigens ist es besser Programmcode mit dem 'Code' Tag ein zu fügen, das sieht dann so aus:



Code :


#include <avr/io.h>



#define true 1 // logic definition

#define false 0



// used sub functions:



void wait(int time); // wait funktion



// ************ main function ****************



int main(void)

{

DDRA=0xFF;

while(true)

{

PORTA=0xFF;

wait(200);

PORTA=0x00;

wait(200);

}

}



void wait(int time_ms) // wait function

{

TCCR0=0x03; // 64 prescaler

while(time_ms!=0)

{

while(!(TIFR & 0x01));

TIFR |= 0x01; //clear TOV0

time_ms--;

}

}



Jetzt sag mal was du davon verstehst und was nicht? Zum besseren Verständnis empfiehlt es sich das Datenblatt des ATmega16 einzusehen

mfg Fritz

_________________

BID = 575944

Fiech

Gelegenheitsposter



Beiträge: 63
Wohnort: Wr. Neustadt

 

  

Oh cool ist eh so ähnlich wie C#

Ich verstehe alles, nur Folgendes ist mir nicht ganz klar:

// wait function

{

TCCR0=0x03; // 64 prescaler

while(time_ms!=0)

{

while(!(TIFR & 0x01));

TIFR |= 0x01; //clear TOV0

time_ms--;

}

}


Könntest du mir erklären was die Teile die Fett geschrieben sind tun.


wie funktioniert das mit Tag?

BID = 575992

clembra

Inventar



Beiträge: 5402
Wohnort: Weeze / Niederrhein
ICQ Status  


Offtopic :
Fiech, mache bitte Gebrauch von den Code-Tags. So (=ohne) werden die Postings sehr schnell unübersichtlich im Fritz (äh Fred ). Ausserdem bleibt die Einrückung in Code-Tags bestehen. Sehr langer Code kann hingegen besser als Textdatei angehängt werden.

Edit: Erst die vorherigen Beiträge lesen, dann meckern
Also im einfachen Windows-Style:
1. Möglichkeit: Code einfügen, markieren und den Button "Code" über dem Editor-Fenster drücken.
2. Möglichkeit: Code-Button drücken, Text einfügen, "Code*" Button nochmal drücken.
3. Möglichkeit: Den bbcode "(code)hier Code einfügen(/code)" mit eckigen Klammern selbst eingeben.

Nochmal Edit, diesmal Themenbezogen:
TCCR0 und TIFR sind so genannte Ports, in diesem Fall Timer/Counter Control Register 0 (TCCR0) bzw. Timer/Counter Interrupt Flag Register (TIFR)
Näheres dazu im Datenblatt der AVR ATmega (ATmega8 oder ATmega16 z.B.), kostenlos bei atmel.com herunterzuladen.

Gruß Clemens

_________________
Reboot oder be root, das ist hier die Frage.

[ Diese Nachricht wurde geändert von: clembra am 31 Dez 2008  1:21 ]

BID = 576050

Fiech

Gelegenheitsposter



Beiträge: 63
Wohnort: Wr. Neustadt

Ok ich werds mir merken!

Kann mir jemand eine Entwicklungsumgebung für C sagen(Freeware)



BID = 576064

ffeichtinger

Schreibmaschine



Beiträge: 1050
Wohnort: Traunkirchen im Salzkammergut

Hallo

Wenn du microcontroller programmierst musst du ab und zu einzelne Bits in den Steuerregistern, die meißt ein Byte lang sind, verändern. Da aber ein Byte das kleinste ist was sich addressieren lässt kann man die Bits nicht einzeln verändern, man muss sich 'Tricks' einfallen lassen.

Das zum einen bitweise Boolsche Operationen (&, |, !,...) soll heißen (und, oder, nicht,...). Diese vergleichen jeweils ein Bit miteinander. zb:

01010000 | 00001010 = 01011010

Zum anderen sind hexadezimale Zahlen ganz praktisch:
Die Ziffern 0-9 werden einfach mit Buchstaben A-F fortgesetzt. Man kann so mit einer Stelle 16 verschiedene Zustände angeben. (statt 10 wie bei dezimalen Zahlen, daher der Name) Zur Kennzeichnung einer hex Zahl schreibt man in C ein 0x davor. Mit zwei Ziffern kann man jetzt schon 16*16 Zustände darstellen (vergleiche 10*10) und das entspricht... hopsala 256, also genau ein Byte. Wenn man also schreibt:

(0b heißt natürlich binär)

0x03 heist dass eigentlich 0b00000011
0x00 natürlich 0b00000000 und
0xFF heißt 0b11111111

Auf diese Weise kann man sich Zuweisungen und Abfragen zusammenbasteln, will man zb. Bit 0 (TOV0) des Registers TIFR (Timer Interrupt Flag Register) setzen ohne die anderen Bits zu verändern so schreibt man:

TIFR |= 0x01

was nichts anderes heißt als:

TIFR = TIFR | 0b00000001

Die Schreibweise mit 0b ist aber nicht in jeder C Version genormt und sollte daher nicht verwendet werden.

Will man überprüfen ob ein Bit in einem Register gesetzt wurde so schreibt man:

TIFR & 0x01

Und will man solange an einer Stelle warten bis das das Bit gesetzt wurde so schreibt man:

while(!(TIFR & 0x01));

Ja, auch dafür kann man eine while Schleife missbrauchen

Tja, das war erstmal alles nur C, und welche Register man wie, wann und warum setzten muss, das ist es was eigentlich das Programmieren von Microcontrollern ausmacht.

Deshalb, wenn du die oben beschriebenen Basics verstanden hast (mehr davon im C Tutorial), ist es Zeit sich mal ein Datenblatt durchzulesen. Wie der alte Meister schon wusste: Datenblattleser wissen mehr.

http://www.atmel.com/dyn/resources/prod_documents/doc8154.pdf

Achja, die Entwicklungsumgebung:

Für Windows: WIN-AVR: http://www.mikrocontroller.net/articles/WinAVR

Der Editor ist bereits dabei: Programmers Notepad.

mfg Fritz

_________________


Vorherige Seite      
Gehe zu Seite ( Vorherige Seite 1 | 2 )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 18 Beiträge im Durchschnitt pro Tag       heute wurden bisher 1 Beiträge verfasst
© x sparkkelsputz        Besucher : 187859786   Heute : 7389    Gestern : 21855    Online : 304        21.12.2025    13:02
16 Besucher in den letzten 60 Sekunden        alle 3.75 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0291039943695