Eine kleine Frage zur Programmierung

Gast #1655080
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:
1
Ddrb = &B00010000
2

3
  Do
4
    Portb.4 = 1
5
    Waitms 200
6
    Portb.4 = 0
7
    Waitms 200
8
  Loop
9
End


Nun geht das aber nur bis man
1
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
1
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
Gast #1655114
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.
Gast #1656178
Lesenswert?

Hi Leute, ich habe meine Schaltung nun ein wenig verbessert.

Folgenden BASCOM Code Benutze ich:
1
Dim Puls1 As Word
2
Dim Puls2 As Word
3

4
Ddrb = &B00010000
5
Portb.1 = 1
6
Portb.2 = 1
7
Portb.3 = 1
8

9

10
Puls1 = 0
11

12
   If Pinb.1 = 1 Then
13

14
       Puls1 = Puls1 + 1
15
       Waitms 200
16
   End If
17

18

19
   If Pinb.2 = 1 Then
20

21
       Puls1 = Puls1 - 1
22
       Waitms 200
23
   End If
24

25

26
   If Pinb.3 = 1 Then
27

28
       Puls1 = 0
29
       Puls2 = 20
30
       Waitms 200
31
   End If
32

33

34
Puls2 = 20 + Puls1
35

36

37
  Do
38

39
    Portb.4 = 1
40
    Waitus Puls2
41
    Portb.4 = 0
42
    Waitus Puls2
43

44
  Loop
45
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?
#1656236
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.
Gast #1656250
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
Gast #1656256
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 ;)
Gast #1656267
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.
#1656326
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...
;-)

...
Angehängte Dateien:
Gast #1657036
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren