- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 27

Thema: Noob will in Microcontrollerprogrammierung + Roboterbau einsteigen - Anfängerfragen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.04.2014
    Beiträge
    27
    Das LCD kann ich nun erfolgreich programmieren. Hab ein paar kleine Fehler gefunden (im Quelltext nach "cls" noch "wait..." eingefügt, dann mit dem myAVRprogtool nicht die .bas-datei sondern die .hex-Datei geöffnet und auf den µC gebrannt; und ich vermute, dass Bascom ein Problem damit hatte, ein völlig neues, anderes Programm für den µC unter gleichem Namen wie eine vorherige Datei zu überschreiben beim Abspeichern).

    Nun mein nächstes Problem: Wie benutze ich das Poti (Potentiometer) richtig?
    Ich habe zwei einfach Testbeispiele erfolglos ausprobiert:
    - LEDs Rot, Gelb, Grün laufen durch, wobei die Pause (alle LEDs aus) durch das Poti geregelt werden sollen.
    - Summer gibt einen Ton über ein paar Sekunden aus, wobei das Poti die Tonhöhe (Frequenz) bestimmt
    Mein Problem: durch Betätigung des Potis ändern sich die Werte nicht. LEDs leuchten immer in gleicher Geschwindigket, Summer gibt immer den gleichen Ton aus.

    1.)Wie schließe ich das Poti an? In einem Beispielprogramm wurde ein Port als Input definiert (zb. "Config Portb.2 = Input") und dort der Abgriff des Schleifkontakts mit einem Patchkabel an diesem Port angeschlossen. Ich frage mich dabei: woher weiß der µC, dass er bei "Getadc" das Potential an diesem Port abgreifen soll? In dem Beispielprogramm wurde nichts weiter definiert für diesen Port. Außerdem habe ich mitten auf dem Board einen Anschluss namens "AREF" - kann es sein dass ich immer hier das Poti anschließen muss und das gar nicht über andere Ports geht?
    2.) Zur Synthax: Was bedeutet "Getadc(0)" und "Getadc(1)"? Wo ist der Unterschied?
    Was bedeuten die Variablen hinter "Config ADC" (Single, Prescaler, Reference)
    3.) kann es sein, dass mein Problem daran liegt, dass ich das Board per USB-Kabel betreibe (über USB to UART)? Habe gelesen, dass eine Versorgungsquelle von ca. 9V mit etwa 10 - 50 mA empfohlen wird. USB Kabel haben im Normalfall 100 mA Strom. Reicht der Widerstand des Potis evtl. nicht aus?

    Hoffe auf Antworten und Hilfe.

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Spinner,

    als erstes möchte ich dich Bitte, bring erst mal ein kleines Projekt zum Erfolg z.B.(LCD-Anzeige), dann fang das nächste an. Nicht wie ich vermute erste klappt nicht nun mache ich was anderes.
    Dies ist nach meiner Meinung der aller größte Fehler für „Einsteiger“.
    1. musst du dich mal für eine Programmiersprache entscheiten(ist aber oft von fertiger Hardware abhängig) Ich Empfehle: Bascom (ist ja sehr gut lesbar) Später kann man immer noch umsteigen, ich bin und bleibe bei BASCOM. Den Compiler kann man nicht mit dem alten BASIC-Compiler für DOS auf eine Stufe stellen. Die erzeugte Hex-Datei zum schreiben auf einem Controller ist schon sehr „schmal“ Aber Bitte beachten dies ist meine Meinung und soll auf keinen Fall eine andere Programmiersprache abwerten. Denn hier geht es um den Einstig in dieser Materie und nicht was ist besser oder schlechter.
    2. Einfach eine Hex-Datei die als Beispiel geliefert wird zu „laden“ und diese nicht lesen kann(ich kann es noch mit einigen Aufwand) ist doch nichts für „Einsteiger“. Da solle man sich schon auf die Entwickler verlassen. Wie ich es auch mache.
    3.
    So nun zu der direkten Anfrage.
    Die bas-datei ist dein Programm, um es aber in Maschinencode(Hex) zu wandeln musst du in Bascom erst mal das Butten [Comile] oder F7 drücken. Nur dann wird die Hex erzeugt. Erst danach auf [Program chip] oder F4.
    All dies, hat den Vorteil du musst nicht wie in C oder GCC erst mal eine Datei #include <avr/io.h> oder MCU usw. erstellen. All dies macht Bascom mit der „Kopfeinstellung“

    Z.B wie ich es aus deinem Versuch mit LCD erkennen kann.
    $regfile = "m8def.dat" 'ist ein ATMega8

    ‚diese Einstellungen kann ich später beschreiben wenn gewünscht.
    $hwstack = 40
    $swstack = 40
    $framesize = 40
    ‚Hier ist Vorsicht angesagt, ist immer abhängig von der Fuse Einstellung.
    ‚Ist dein µC mit ext. Quarz beschaltet muss die Frequenz hier eingestellen.
    $crystal = 8000000 'Interner Takt (8MHz)
    ‚Erst mal später einfügen wenn COM- Terminal verwendet wird
    $baud = 19200 Register für COM-Ausgabe reservierten

    ‚Möchtest du die Pins für Analogeingang einstellen kommt als nächste Zeile.

    Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Referenzspannung auf 5 Volt

    Der int. Wandler benötigt eine Spannungsversorgung also AVCC mit 5Volt verbinden.
    AREF ist ein Referenzspannungsausgang, erstmal offen lassen


    Bedeutet dein Poti ist auf eine Seite auf 5V die andere auf GND. Der Schleifer geht auf einem Analogeingang des µC. Angenommen auf Pin AD0. Die Abfrage wäre somit Getadc(0)
    Da der µC nur ein ADC DC Wandler hat und alle Eingänge abgefragt werden können, muss Multiplexer gestartet werden. Dies macht der Befehl:

    Start Adc

    'So nur noch Analog – Eingang dimensionieren
    Dim A0 As Word
    ‚nun wird in die Variable A0 das Ergebnis geschrieben.
    A0 = Getadc(0)
    ‚Nun kannst du Entscheidungen treffen z.B ist A0 = 1023 (Schleifer auf 5Volt)

    IF A0 > 1020 Then ‘“mach was”
    ‘Else ‘mach was anderes”
    End If

    PS. Hast du eine kleine Hardware aufgebaut und beschreibst diese mit verwendeten Controller (wichtig Controllertaktung) und Pinbelegung, schreibe ich dich nach Anforderung eine Bas. Sende dann diese auch in Hex-Code, damit du Erfahrungen sammeln kannst.
    Kann nur dann Helfen, indem ich Hardware nachbaue und Software testen kann.

    Mit freundlichen Grüßen
    fredred

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.04.2014
    Beiträge
    27
    @fredred: Deine Vermutung ist allerdings falsch. Ich habe NICHT etwas anderes versucht, nur weil das eine nicht funktioniert hat.
    In einer früheren Antwort hatte ich auch bereits erwähnt, dass ich mich nun für Bascom als Sprache entschieden habe (zumindest für den Einstieg). Evtl werde ich später irgendwann mal ein wenig C++ oder Luna ausprobieren - aber erstmal arbeite ich nun mit Bascom.
    Ich habe es bereits geschafft, das LCD zu programmieren und mehrere Programme damit schon geschrieben (z.B. bei Taster1 zeigt LCD etwas bestimmtes an, bei Taster2 etwas anderes)
    Ich war bei meinem Lernfortschritt auch etwas kreativ und habe ein Programm bis jetzt immer weiterentwickelt und Neuerlerntes immer mit eingebaut.
    Zuerst leuchtete eine LED, dann wurde es zur Ampel, die immer hin und herschaltet, dann wurde die Ampel per Taster geschaltet, nun ist zu der Ampelschaltung noch eine LCD-Anzeige gekommen ("Rot", "Bitte warten...", "umschalten...", "Gruen" und "Stopp" werden dabei je nach Aktion angezeigt).
    Das Potentiometer funktioniert nun auch. Ich wusste lediglich nicht, an welchen Port ich es anschließen musste - wo ich es jetzt weiß ist es mir völlig klar, da es im Datenblatt steht, dass beim Atmega8A die Ports C0 bis C0 die ADC0 bis ADC5-Abgriffe sind.

Ähnliche Themen

  1. Einstieg in Microcontrollerprogrammierung
    Von 2linkehaende im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 2
    Letzter Beitrag: 13.11.2009, 13:27
  2. Absoluter Neuling will in C einsteigen
    Von Michael 123 im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 21.09.2008, 12:11
  3. Wie soll ich einsteigen?
    Von pras_18 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 13.05.2008, 20:41
  4. mit RN-Control einsteigen und das zum Robot erweitern?
    Von StoredProc im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 2
    Letzter Beitrag: 12.12.2006, 14:37
  5. Microcontrollerprogrammierung mit C/C++
    Von mArc2k5 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 31.05.2005, 06:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen