Einstieg in µC???

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: 05 10 2024  10:02:51      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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

Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )      


Autor
Einstieg in µC???

    







BID = 482590

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld
 

  


da ich in letzter zeit des öfteren kleine projekten habe bei denen mir ein µC verdammt hilfreich wäre, ich aber immer auf eine "notlösung" umsteigen muss da ich kein µC kann.

mir wurde allerdings gesagt, dass es verdammt lange dauert sich da einzuarbeiten.

darum wollte ich mal wissen wie lange es wohl dauern würde bis man ein paar kleine progs (nix besonderes) selber schreiben kann.
keine vorkenntnisse in prog sprachen, bei einem zeiteinsatz von ca. 1 std. pro tag

dacht z.B. an avr und einen atmega8 bzw. attiny 2313 oder so

_________________

BID = 482595

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

 

  

Moin,

Das geht eigentlich schnell.
Ich denke, so nach 2-3 Tagen wird das erste Programm, sehr einfach, laufen.
Typisch sind LED-Blinker oder auch Taster-drücken-LED-anmachen-Programme.

Das Ganze hängt aber auch damit zusammen, wie du programmieren willst:
1. sehr leicht, aber für absolute Programmieranfänger schon schwierig: Bascom Basic
2. wesentlich komplexer, aber extrem vorteilhafter, da sehr gut implementiert und getestet von einer großen Community: C (avr-gcc und binutils)
3. Wesentlich umständlicher, aber nicht unbedingt schwerer, wenn grundsätzliche digitale Schaltungsgrundlagen (Register, Latche, größere Speicher, Zähler, Bitmanipulation etc.) vorhanden sind: Assembler (-> Instruktionen, die dann nur noch durch den Assembler kodiert werden. Du musst quasi genau das machen, was du sonst rein diskret aufbauen würdest. Z.B. gibt es Instruktionen, die man auch quasi als Baustein der diversen Digitalschaltkreisfamilien erwerben kann)

Ich würde entweder direkt Maschinensprache/Assembler oder Basic empfehlen. C kann man später lernen, da die Sprache ansich einen größeren Lernaufwand darstellt. Dafür ist der erzeugte Kode quasi so perfekt, dass man nur selten Assembler benötigt, was mit C übrigens kein Problem ist, kann man mit C verbinden.

Die von dir genannten Bausteine sind gut, habe ich beide schon öfters benutzt.

_________________

BID = 482612

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld

@DonComi

hm, also ich dachte bisher an einen assambler (avr) (bisher nur wenig grundlagen vorhanden)
denkst du Bascom Basic wäre da sinnvoller?

dann hab ich ja zumindest schon mal die richtigen controller

wie lernt man sich sowas denn am besten?
bzw. wo gibts ein gutes tutorial dafür?

_________________

BID = 482617

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Tutorial habe ich nicht benutzt, ich habe zuerst AVR-Assembler gelernt (die Assemblersprache gibts eh nicht); und zwar anhand der Datenblätter. Dort sind alle vorhandenen Mnemonics (so heißt ein Symbol für einen Maschinenbefehl) samt Operanden wie Register, Adressen, Konstanten oder Bitnummern und benötigte Ausführungszeit aufgelistet.

Mit Bascom Basic habe ich mich ca. 1-2 Wochen herumgeschlagen, dann habe ich es gelassen, gefällt mir einfach nicht.
Basic konnte ich vorher, setze aber grade alles daran, es wieder zu verlernen .

Wenn du Windows nutzt kann ich nur AVR Studio empfehlen, wenn du Linux nutzt dann sowas wie avra und avr-dude als Brennerinterface.


Sonst sollten sich aber Tutorials finden lassen, nur kann ich nicht so nachvollziehen, wie man damit vernünftig lernen kann.

_________________

BID = 482619

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Evtl. ist das Evual-board von pollin ganz hilfreich ...
da ist einiges an peripherie schon verbaut, ganz gut dokumentiert und jeder weis, was Du für eine Hardware hast...
Und mega8/16 und tiny2313 werden (u.a.) auch unterstützt!
Mit weniger als €20 bist Du dabei!
Pack's an!

BID = 482849

BjörnB

Stammposter

Beiträge: 242
Wohnort: Dortmund

Hallo,

ich habe damals in Assembler (im AVR-Studio) angefangen. Dadurch konnte ich den Aufbau des Controllers (ATmega16) sehr gut kennen lernen, was sehr praktisch ist, um für den Controller möglichst gut verarbeitbare und damit schnelle Programme zu schreiben. Für umfangreiche Projekte wird Assembler aber schnell unübersichtlich und lang. Irgendwann bin ich daher auf C (WinAVR) umgestiegen (konnte ich aber schon vorher). Ich würde Dir empfehlen, im Zweifelsfall lieber mit C anzufangen, da Du so von vornherein gezwungen bist, sauber und strukturiert zu programmieren. Für den Einstieg gibt es auch ein praktisches Wikibook (http://de.wikibooks.org/wiki/C-Programmierung). Von Basic würde ich hingegen eher abraten, so vermeidest Du, dass Du dir irgendwelche unschönen programmiertechnischen Marotten angewöhnst, die Dir hinterher beim Umstieg auf C Schwierigkeiten bereiten. Und wie sagte damals noch mein Prof. in der C-Einführungsvorlesung: "Wer mit Basic gelernt hat zu programmieren, ist für sein Leben verdorben."

Schönen Gruß,
Björn

BID = 482852

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

Pollinboard und das AVR Studio sind erstmal ein guter Einstieg. Wenn man noch garkeine Kenntnisse hat ist es auf jeden Fall sinnvoll erstmal dern Controller von Grund auf zu lernen und das geht am Besten mit Assembler. Wenn man dann die Funktionen des Chips einigermassen drauf hat kann man dann auch auf C umsteigen, um sich z.B. einiges zu vereinfachen. Gleich in C einsteigen halte ich für nicht so optimal, da man bei der Fehlersuche ggf auch mal in Assemblercodes rumsuchen muss und dann ist es nützlich das auch zu können. Wer sich garnicht um den Controller kümmern will und auch keine tieferen Einblicke in irgendwelche Funktionen wünscht kann auch ruhig mit BASIC anfangen. Das ist aber der schlechteste Einstieg. Zumindest mit BASCOM. FastAVR ist auch nicht viel besser, gibt aber als Zwischenschritt das erzeugte Assemblerprogramm aus, sodass eine eventuelle Fehlersuche erheblich erleichtert wird.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 483208

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld

erstmal danke für die zahlreichen hilfestellungen!

hab mir das board von pollin mal angesehen.
kann ich da direkt über die serielle schnittstelle prog. oder geht das nur über ISP?
kenne die programmierung bisher nur über den AVR-Prorgrammer und da wird über den 10-poligen (bzw. 6-poligen) ISP programmiert.
ist der programmer also notwendig oder geht das auch über die serielle schnittstelle?

dann werd ich wohl mal mit AVR anfangen.

nach weihnachten hoffe ich, dass ich zeit habe mich da etwas einzulesen

_________________

BID = 483311

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld

so, ich habe mich mal ein bisschen in das datenblatt des tiny2313 und in dieses Tutorial vertieft. http://www.mikrocontroller.net/articles/AVR-Tutorial

hab zwar noch ein bisschen probleme damit die ganzen zusammenhänge zu verstehen, aber ich denke das gibt sich noch.

eine frage hab ich jetzt noch:

Es gibt doch beim AVR-Studio 4 die möglichkeit ein geschriebenes programm ohne µC zu "testen"
wie funktioniert das denn, bzw. kann man diese funktion überhaupt sinnvoll nutzen?

_________________

BID = 483324

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Oh ja, das kann man.

Lass mich nachdenken, ist etwads her, aber es geht etwa so:

1. Parameter einstellen, wie Taktfrequenz, genutzter µC
2. Schritt-für-Schritt-Simulation mit STRG+F11 (oder F9-F12, irgendwas da oben ) starten.
3. Mit F11 (oder F10?) kannst du nun jede einzelne Zeile ausführen lassen.

Es gibt bei der Simulation die Möglichkeit, alle IO-Ports (Ein-/Ausgängen, Timer, UART, ...), Speicherinhalte und Registerinhalte (ist eigentlich das selbe, ist aber unwichtig) anzeigen zu lassen und zu manipulieren (Simulation eines Tastendrucks o.ä.).


_________________

BID = 486457

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld

so, habe mal ein kleines programm geschrieben zum "led mittels taster an und ausschalten" das klappt.

möchte jetzt gerne ein prog. schreiben.

dieses sollte so aussehen:

wenn an PIN x eine 1 anliegt dann soll für ca. 0,5 sekunden an pin Y eine 1 anliegen
ändert sich PIN x von 1 auf 0 dann soll an Pin Z für 0,5 sekunden eine 1 anliegen.

weiß aber noch nicht genau wie ich das angehe.

kann ich ein einzelnes bit überprüfen (vergleichen) oder nur ein ganzes register?
dachte daran den wert eines bits in ein register zu schreiben, beim nächsten programmdurchlauf das eine bit prüfen ob es sich verändert hat (also z.B. Pin x von 1 auf 0 geändert)
wenn es sich geändert hat einen timer anlaufen lassen der mir für 0,5 sekunden eine 1 an einen bestimmten pin liefert?

hoffe ich konnt mich einigermaßen verständlich ausdrücken!
Kann mir da jemand behilflich sein?

_________________

BID = 486470

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich

Ich versuchs mal. Bin aber auch Anfänger, also ohne Garantie.


Zitat :
1. Parameter einstellen, wie Taktfrequenz, genutzter µC
2. Schritt-für-Schritt-Simulation mit STRG+F11 (oder F9-F12, irgendwas da oben ) starten.
3. Mit F11 (oder F10?) kannst du nun jede einzelne Zeile ausführen lassen.


Programm schreiben, Strg+F7 für "Build and Run", F11 für Einzelschritt.


Zitat :
kann ich ein einzelnes bit überprüfen (vergleichen) oder nur ein ganzes register?

Bei solchen Fragen hilft das Instruction Set.
Guck dir mal SBRC, SBRS, SBIC und SBIS an.

Ich würde das ungefähr so lösen (auch Anfänger!):


Code :


1. Includes, Registerdefinitionen,...
2. Pins als Eingänge/Ausgänge definieren (Register DDRx)
3. PinX einlesen, prüfen:
Wenn PinX=1:
4a. PinY=1
5a. 0,5 Sekunden warten (Google: AVR delay loop generator)
6a. PinY=0
7a. zurück zu 3.
Wenn PinX=0:
4b. PinZ=1
5b. 0,5 Sekunden warten
6b. PinZ=0
7b. zurück zu 3.


(Als Code ist das besser zu formatieren.)

Wenn die Version erstmal läuft kann man das ganze mit Unterprogrammen (RCALL) probieren, vorher Stack definieren! Danach anfangen mit Interrupts zu basteln, soweit bin ich noch nicht gekommen.

Viel Erfolg!!!

PS und OT:
Ich hab auch mit Bascom angefangen, bin nach sehr kurzer Zeit aber auf ASM umgestiegen. Da sind wenigstens alle Befehle in einem Dokument zu finden, man muss sich nicht mit irgendwelchen Hilfe-Dateien rumschlagen. Ich find ASM mittlerweile einfacher als Hochsprachen wie Bascom oder andere (außerhalb des µC-Bereichs).

BID = 486479

Chillin

Stammposter



Beiträge: 203
Wohnort: Karlshuld

ich habe das jetzt mal so gelöst:
ich arbeite mit AVR




.include "2313def.inc"
loop:

ldi r16, 0b00000011 ;Datenrichtung PORTB
out DDRB, r16

ldi r16, 0b00000000 ;Datenrichtung PORTD
out DDRD, r16

in r16, PIND ;r16 mit wert PIND laden
cp r16, r18 ;r16 mit r18 vergleichen
brne nicht_gleich ;wenn nicht gleich springen


rjmp loop

nicht_gleich:
mov r18, r16 ;r18 mit wert von r16 laden
ldi r17, 0b00000001 ;r17 mit 0b00000001 laden
cbi PORTB, 0 ;Bit 0 von PORTB auf 0 setzen
out PINB, r17 ;r17 an PINB ausgeben
nop ;0,5s Pause (Fehlt!!!)
cbi PORTB, 0 ;Bit 0 von PINB auf 0 setzen
in r16, PORTB ;PINB auf 0 setzen
out PINB, r16


damit würde es prinzipiell funktionieren, ich brauche nur noch eine 0,5 s Pause (in der nichts geschieht)

wie man oben sehen kann vergleiche ich 2 register miteinander (r16 und r18)
kann ich an dieser stelle nur bit 0 von r16 mit bit 0 von r18 vergleichen?







_________________

EDIT: sorry, die formatierung meines programmcodes ist leider verloren gegangen.
kann mir trotzdem jemand mit meiner letzten frage weiterhelfen?

[ Diese Nachricht wurde geändert von: Chillin am 31 Dez 2007 16:12 ]

BID = 486480

bastler16

Schreibmaschine

Beiträge: 2140
Wohnort: Frankreich

Les mal mein oberes Posting, da steht was zu den Bit-Vergleichen und der Pause.

EDIT: Hab mal dein Prog. in den Simulator geschmissen. Irgendwie stimmt das nicht mit dem überein was du oben geschrieben hast:

Zitat :
wenn an PIN x eine 1 anliegt dann soll für ca. 0,5 sekunden an pin Y eine 1 anliegen
ändert sich PIN x von 1 auf 0 dann soll an Pin Z für 0,5 sekunden eine 1 anliegen.

Bei deinem Programm sind PinY und PinZ dasselbe und es wird ein ganzer Port überwacht.
Das Programm erzeugt also einen kurzen Puls an einem bestimmten Pin sobald sich PortD verändert.


[ Diese Nachricht wurde geändert von: bastler16 am 31 Dez 2007 16:20 ]

BID = 486491

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Moin,

1. Die Register PINx sind readonly, also nur lesbar
2. innerhalb von loop wird teilweise immer das Gleiche gemacht, das kann man "ausklammern", also vor loop schreiben. Spart rechenzeit, wenn auch wenig.

Mit welcher Taktfrequenz läuft deine CPU?
Wenn es 1MHz sind, dann verursacht folgendes Konstrukt eine halbe Sekunde Verzögerung:

delay:
push r30
push r31

ldi r31, 0xC3
ldi r30, 0x50

loop_:
nop
nop
nop
nop
nop
nop
sbiw r30, 1
brne loop_

pop r31
pop r30
ret

Die ganzen nops sind wichtig, weil sonst eine 16-Bit-Zahl zu klein wäre, um die Taktfrequnez von 1MHz auf 0.5Hz runterzuteilen.

push und pop sowie ret benötigen auch etwas Zeit, ist aber eher vernachlässigbar.


Du beginnt nun so mit deinem Programm:

.include "2313def.inc"

reset:
ldi r16, low(RAMEND)
ldi r17, high(RAMEND)
out SPL, r16
out SPH, r17
(hier wurde der Stackpointer initialisiert, damit du Unterprogramme starten und beenden kannst.)

dann dein restlicher Kode. Du kannst nun mit

rcall delay

etwa eine halbe Sekunde verzögern.
6x nop sind je ein Taktzyklus plus 2 Taktzyklen (2µs) der sbiw-Instruktion und 2 Zyklen (erneut 2µs) für brne. Macht pro Durchgang 10µs * 50000 (=0x0xC350).

_________________


[ Diese Nachricht wurde geändert von: DonComi am 31 Dez 2007 16:35 ]


      Nächste Seite
Gehe zu Seite ( 1 | 2 | 3 Nächste Seite )
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 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 7 Beiträge verfasst
© x sparkkelsputz        Besucher : 182127512   Heute : 1315    Gestern : 5499    Online : 698        5.10.2024    10:02
6 Besucher in den letzten 60 Sekunden        alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0374529361725