Microcontroller-Tutorial für Anfänger - Teil I - Grundlagen

  • Also du ahst ja z.B. den PortB, steht ja im Programm. Am PortB hast du 8 Pins (0-7). Für jeden diesem Pin steht nun im Programm die Ziffer (sind ja auch 8) Wenn du am Pin 1 die LED hast die blitzen soll schreibst du also:


    Warten = 50


    PortB = &B10000000
    Waitms Warten
    PortB = &B00000000


    da ich nicht in Bscoom progge, weis ich nicht ob das jetzt so stimmt, müsste aber meiner Meinung nach so sein.

  • Den Kondensator brauchst du dazu:
    http://www.roboternetz.de/wiss…ex.php/Abblockkondensator


    brauchst du einfach nur prallel an GND und VCC mit den beiden Anschlüssen anlöten. Muss aber eine Kerko sein, oder Folienkondensator, Elko nützt nichts.
    Ich würde dir das aber Empfehlen, ich habe es bei einem 7805 mal gemerkt, da hatte ich kein Kondensator dran und das ding hat saumäßig geschwingt, es kamen statt 5V 8V raus.

  • Hallo!


    Ich habe mir das ganze immer schön durchgelesen und versucht, das ganze zu kapieren, aber jetzt hänge ich doch...


    Ich habe alles so wie im TUT beschrieben aufgebaut, nur keinen Reset-Taster eingebaut. Programmieren funktionierte auch einwandfrei.
    Nur wenn ich jetzt die 5V anschliesse, blinken die LEDs irgendwie in einer komischen Reihenfolge, die dafür aber immer gleich ist.
    Den Basic-Code habe ich einfach kopiert und eingefügt.


    Also es blínkt erst LED1, dann LED1 und LED3, usw....
    Eine gewisse Ordnung im Blinken habe ich noch nicht feststellen können. Habe jetzt auch schon den 2313 neu programmiert.. es geht einfach nicht richtig. Das sollte doch schön nacheinander blinken oder? Also erst 1 dann 2 dann 3 dann 4 ...oder soll das so durcheinander sein?


    Vielleicht bin ich einfach zu blöd für das ganze und jemand hier kann eine Ferndiagnose machen.


    MfG Florian


    PS: Wenns was hilft kann ich ja auch mal ein Foto machen.

  • Hallo,


    also hab jetz noch mal in aaaaaller Ruhe das TUT gelesn und auch den Fehler gefunden.


    Es war dieses "&B" das gefehlt hat.. wurde ja hier schon geschrieben. :pinch: :pinch: :pinch:
    Jetzt gehts einwandfrei.


    Danke an den Schreiber dieses Threads! Ist echt klasse gemacht :thumbup:


    Mfg Flo

  • Hallo!


    Zuerstmal muss ich sagen, das dieses Forum echt super ist. Bin letztens auf ledstyles.de gekommen :).


    Da ich in Sachen Microcontroller noch nen ziemlicher Noob bin, hoffe ich auf ein wenig Nachsicht ;).


    Mein nächstes Projekt soll nich nur schnöde "rumleuchten" sondern über nen ATTINY 2313 ein wenig Leben eingehaucht werden.
    Ich habe mir auf Arbeit eine Analoguhr aus Stahl gefräst (Nach dem Stempeln :P). Jedenfalls soll jetzt jede Stunde eine eigene LED bekommen (Nach Adam Riese sind dann 12 LEDs). Nun hab ich ja euer geiles (sorry) Microcontroller-Tutorial gefunden und da fings schon während des Lesens an im Kopf zu arbeiten...


    Ich würde gerne, das die LEDs dem Sekundenzeiger folgen, das würde also bedeuten, das sie im 5-Sekunden-Abstand rundrum angehen, wenn der Sekundenzeiger die LED erreicht. Dann wenn der Sekundenzeiger die 12 erreicht alles wieder auf Anfang.
    Von der Programmierung her dürfte das kein Problem sein, denk ich oder?


    Meine Fragen dazu sind:
    1. Ich habe des öfteren von einem Festspannungsregler gelesen - ich möchte das ganze mit einem Steckernetzteil auf 5V betreiben, brauche ich dazu solch einen Festspannungsregler - btw. Wozu bräuchte ich den dann? Welche Funktion hat der?
    2. Wie genau arbeiten solche Microcontroller? Wenn ich z.B.


    würde das (auch über eine längere Zeit) funktionieren?
    3. Wozu ist diese PullUp-Verbindung zwischen VCC und RESET? Das ist mir nicht so ganz klar.


    Danke :)

  • 1. die Festspannungsregler sind dafür da den MC vor zu großer Spannung zu schützen. Bei über 5,5volt geht der nämlich kaputt.. Es ist also besser imme reinen einzubauen... kosten ja (fast )nix


    2. kommt drauf an... der interne RC schwingkreis ist recht ungenau... allerdings ist es bei deiner Anwendung wahrscheinlich egal, wenn der eine Abweichung von 1/100s pro Minute oder so hat... Hast du einen Sekundenzeigeer an der Uhr? das wird dann schwierig die genau aufeinande abzustimmen, da die analoge uhr eine Fehlermarge hat und der MC auch... da hilft es auch nix, wen man mit einem externen Quarz oder Oscillator arbeitet. wenn nämlich die Uhr langsamer geht, wenn die Bateriespannung absinkt, dann laufen die auch wieder asynchron.
    Prinzipiell würde ich sowas über einen Interrupt machen, der alle 1s ausgelöst wird (kann man wenn man die Frequenz des externen Quarzes geschickt wählt und den Prescaler richtig einstellt recht gut machen). Bei Waitms oder delayh() (in C) wartet der MC einfach und tut nix.. wenn man das über einen Interrupt macht, dann kann man den MC noch für was anderen Nutzen.... Ich weiss jetzt auch nicht, wie der waitms Befehl von der Frequenz des MC abhängt, bzw wie genau der ist... über Interrupt ists bei solchen ewiglangen Zeiten auf jeden Fall besser... (selbst bei 1ms Länge sollte man das schon per Interrupt machen wenns geht)


    3. Der Pullup dient dazu den Reset Pin auf High zu halten. Wenn der auf Low gezogen wird, dann löst das einen Neustart des MC aus. bzw der MC läuft nicht an, wenn der Reset Pin permanent auf Low liegt... der Widerstand ist dazu da den Eingang Hochohmig zu halten.. d.h. dass da nur einsehr kleiner Strom fließen kann. (Schutz des Pins

  • 2. kommt drauf an... der interne RC schwingkreis ist recht ungenau... allerdings ist es bei deiner Anwendung wahrscheinlich egal, wenn der eine Abweichung von 1/100s pro Minute oder so hat... Hast du einen Sekundenzeigeer an der Uhr? das wird dann schwierig die genau aufeinande abzustimmen, da die analoge uhr eine Fehlermarge hat und der MC auch... da hilft es auch nix, wen man mit einem externen Quarz oder Oscillator arbeitet. wenn nämlich die Uhr langsamer geht, wenn die Bateriespannung absinkt, dann laufen die auch wieder asynchron.


    Hmm, ja klingt logisch, ich hab mir sowas schon gedacht und wollte von daher die 5V hinter dem Festspannungsregler irgendwie auf 1,5V runterregeln und das Quarzwerk damit versorgen - also ohne Batterie. Geht sowas oder wäre das zu kompliziert bzw. machbar?


    Prinzipiell würde ich sowas über einen Interrupt machen, der alle 1s ausgelöst wird (kann man wenn man die Frequenz des externen Quarzes geschickt wählt und den Prescaler richtig einstellt recht gut machen). Bei Waitms oder delayh() (in C) wartet der MC einfach und tut nix.. wenn man das über einen Interrupt macht, dann kann man den MC noch für was anderen Nutzen.... Ich weiss jetzt auch nicht, wie der waitms Befehl von der Frequenz des MC abhängt, bzw wie genau der ist... über Interrupt ists bei solchen ewiglangen Zeiten auf jeden Fall besser... (selbst bei 1ms Länge sollte man das schon per Interrupt machen wenns geht)


    Interrupts? Ähm oh ja :). Als Anfänger sehr verwirrend das Thema. Da muss ich sicher noch ne menge lesen. Aber danke für den Hinweis.


    3. Der Pullup dient dazu den Reset Pin auf High zu halten. Wenn der auf Low gezogen wird, dann löst das einen Neustart des MC aus. bzw der MC läuft nicht an, wenn der Reset Pin permanent auf Low liegt... der Widerstand ist dazu da den Eingang Hochohmig zu halten.. d.h. dass da nur einsehr kleiner Strom fließen kann. (Schutz des Pins)



    Alles klaro :) Danke :D

  • hmm.. das Uhrenbeispiel ist halt in assembler... für den Anfang wohl eher ungeeignet... :)


    Interrupts sind eigentlich ganz einfach zu benutzen. In deinem Fall startet man den Timer, schaltet die interrupts ein (weiss nicht, oib man das bei Bascom auch noch extra machen muss) und dann läuft das Programm immer, wenn der Interrupt ausgelöst wird (wenn z.b. der Timer überläuft) in die interrupt routine hinein. Die macht dann nix anderes als halt die Sekunden hochzuzählen...
    die initialisierung des timers ist da die Hauptscshwierigkeit... wenn man aber lang genug das Datenblatt gewälzt hat, dann schafft man das auch... :)



    Wenn mans ganz genau haben will, dann gibts da spezielle RTC (Real Time clock) Bausteine. Die sind dann schon ziemlich genau... allerdings brauchts für deine Anwendung so eine Genauigkeit eh nicht.. die Sekunten ja dem Quarzwerk folgen sollen. Man müsste da am besten die Sekunden immer wieder synchronisieren. alle stunde oder Minute oder so.. wenn man von dem Quarzwerk den Impuls für den Stunden oder Minutenzwiger abgreifen könnte, dann ware das die perfekte Möglichkeit... wie und ob das allerdings bei dem Uhrwerk möglich ist ist die andere Frage...


  • Sehr interessant. Ich sach ma, zum Üben musses jetzt nich so super genau und synchron sein. Mich würde eher noch interessieren, ob und wie ich die 5V Spannung auf 1,5V runterregeln kann, bzw. ob das überhaupt geht, um von der ungenauigkeit der nachlassenden batterie wegzukommen. Aber schonmal danke ich werd mich auf jeden fall mal mit dem Datenblatt beschäftigen.


    Btw. ist der Speicher auf dem MC ausreichend für so viel code? Hab da keine Vorstellung.


  • Btw. ist der Speicher auf dem MC ausreichend für so viel code? Hab da keine Vorstellung.


    Welchen µC willst du den verwenden :?:
    Beim Atmega88 kommst du mit etwa 10% des verfügbaren Platzes für ne Uhrenfunktion aus.


    Auch ja der Atmega88 hat 8kB Speicher. Umgerechnet etwa 0,008MB ;)