mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eine kleine Frage zur Programmierung


Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Da ich ja, dank euch, endlich mit meinem Atmel Evaluationboard 2.0.1 
meinen ATtiny2313 programmieren kann, habe ich schon einige Projekte 
einfachster Natur realisiert, dazu zählen beispielsweise, blinkende 
Dioden etc.

Nun habe ich aber eine Frage:

Das Blinken habe ich folgendermaßen Realisiert:
Ddrb = &B00010000

  Do
    Portb.4 = 1
    Waitms 200
    Portb.4 = 0
    Waitms 200
  Loop
End


Nun geht das aber nur bis man
Waitms
 auf 1ms stellt.

Wenn ich jetzt aber Beispielsweise ein Signal mit 20.000 Hz erzeugen 
möchte, wie kann ich das realisieren?

Ich hatte an
PULSEOUT
 gedacht, aber da kann ich ja nur die Pulslänge bestimmen, nicht die 
Pausendauer. Da war meine Überlegung halt: Wenn ich da einen Puls 
passender Länge einstelle, ist die Pause ja quasi fast 0, eben nur so 
lange bis das Programm wieder an der Pulse Zeile ist.

Hat zu dem Problem jemand eine Lösung?

MfG

Dr. Janitor

Autor: Lord Ziu (lordziu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst du hier AVR-Tutorial: Timer. Allerdings weiß ich nicht, wie 
man das in Bascom macht.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder bis zu 1000x feinere Auflösung nehmen: WAITUS
http://avrhelp.mcselec.com/waitus.htm

Autor: Michael Rathmair (dj_motionx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde dir auch empfehlen dich in die timer einzulesen.
Also
1. Leds initialisieren.
2. Timer Konfigurieren und starten.
3. Auf Timer IR wearten und die Leds toggeln.

L.g Viel Spaß und Erfolg

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh es gibt auch feinere Auflösungen?!

Uuups.

Das wusst ich nicht. Das versuche ich als erstes. Und ich lese mich dann 
mal in das Tutorial durch.

Danke euch vielmals

Problem ist eigentlich damit schon gelöst.

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, ich habe meine Schaltung nun ein wenig verbessert.

Folgenden BASCOM Code Benutze ich:
Dim Puls1 As Word
Dim Puls2 As Word

Ddrb = &B00010000
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1


Puls1 = 0

   If Pinb.1 = 1 Then

       Puls1 = Puls1 + 1
       Waitms 200
   End If


   If Pinb.2 = 1 Then

       Puls1 = Puls1 - 1
       Waitms 200
   End If


   If Pinb.3 = 1 Then

       Puls1 = 0
       Puls2 = 20
       Waitms 200
   End If


Puls2 = 20 + Puls1


  Do

    Portb.4 = 1
    Waitus Puls2
    Portb.4 = 0
    Waitus Puls2

  Loop
End

Folgendes Soll die Schaltung machen. Ich will ein Signal bestimmter 
Frequenz an PIN 4 erzeugen und mit Tastern an PIN 1 und 2 die Frequenz 
verändern.

Ich hatte bis dato keine Zeit / Möglichkeit die Schaltung genaueren 
Tests zu unterziehen, daher wollte ich fragen: Funktioniert der Code so?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann nicht so recht erkennen, wie du in der innersten (und einzigen) 
do-Loop Schleife jemals eine Tasterabrage machen willst.

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aua, böser Fehler.

Ich glaub die If Then Anfragen müssen in den LOOP ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dr. Janitor schrieb:
> Aua, böser Fehler.
>
> Ich glaub die If Then Anfragen müssen in den LOOP ?

Dann wird aber dein Timing nicht mehr stimmen :-)


-> Wenn du exaktes Timing brauchst, ist Wait ein völlig ungeeignetes 
Instrument. Du brauchst einen Timer, der das Pintoggeln in Hardware 
macht.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guter Rat: Guck weiter Scrubs anstatt zu programmieren. Is besser!

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Dann wird aber dein Timing nicht mehr stimmen :-)

Aber doch nur zu der Zeit, zu der der Taster gedrückt wird oder? Danach 
läuft das ganze doch mit dem "Normalen" Takt weiter.

Aber ich werd mir jetzt mal das Timer Tutorial ankucken...

Klaus schrieb:
> Guter Rat: Guck weiter Scrubs anstatt zu programmieren. Is besser!

1. Woher weisst du, dass ich Scrubs gekuckt habe,
2. Das war unnötig.

MfG

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dr. Janitor schrieb:
> 1. Woher weisst du, dass ich Scrubs gekuckt habe,
> 2. Das war unnötig.

1:  Das seh ich an deinem Namen :-)

2: Schuldigung :) Nimms bitte nicht ernst, ich wollt nur den Spruch mit 
Scrubs loswerden ;)

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah ist was dran :D

hab ja garnicht mehr an meinen Namen gedacht.

Gibt ehrlich wenige denen das auffällt.

mfg

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dr. Janitor schrieb:
> Aber doch nur zu der Zeit, zu der der Taster gedrückt wird oder? Danach
> läuft das ganze doch mit dem "Normalen" Takt weiter.

Naja, nicht ganz. Denn die Abfrage an sich braucht auch ein wenig Zeit. 
In deinem Fall aber wohl vernachlässigbar wenig. Trotzdem ist ein Timer 
das Mittel der Wahl, denn das ist der Schlüssel dazu, dass dein uC 
nachher mal viele Sachen gleichzeitig machen kann.

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Trotzdem ist ein Timer
> das Mittel der Wahl, denn das ist der Schlüssel dazu, dass dein uC
> nachher mal viele Sachen gleichzeitig machen kann.

Deshalb hänge ich mal ein Bascom-Programm für den Tiny13 an, bei dem der 
Timer genutzt wird. Es ist eine kleine Spielerei, die eine Seilbahn 
(oder einen Wendezug) mit einstellbarer Geschwindigkeit (Poti am ADC) 
zwischen zwei Tastern (Reed-Kontakten) hinundherfahren lässt.

Nur mal so zum Analysieren und schaun, wie man in Bascom den kleinen 
Tiny13 programmieren kann. Es zeigt auch, dass es oftmals (laufzeitmäßig 
gesehen) günstiger ist, auf Bascom-Befehle zu verzichten und den Job zu 
Fuß zu machen (siehe Tastenabfrage, ADC-Auslesen). Das Programm zeigt 
auch, wie man eine Software-PWM mit variablen Tastgrad realisiert und 
die Mainloop auf den Timer synchronisiert (was Warteschleifen 
überflüssig macht).

Es soll aber auch ein kleiner Wink mit dem Zaunpfahl sein, was das 
Kommentieren des Programmcodes betrifft.

Ich hoffe, dass das unserem "promovierten Hausmeister" ein Stück weiter 
hilft...
;-)

...

Autor: Dr. Janitor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke ihr habt recht.

Ich wollte mich gestern schon in den Timer einlesen, kam aber nicht mehr 
dazu. Ich hoffe das ich heute Abend dazu zeit finde. Es ist denke ich 
die Sinnvollste Methode.

Melde mich sobald ich weiter bin. Musste heute erstmal ein Paar 
besorgungen für die Schaltung machen ( mir ging der Saft aus )...

Mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.