Forum: Mikrocontroller und Digitale Elektronik Periodendauer eines Taster Signals messen


von Jan S. (guppi788)


Angehängte Dateien:

Lesenswert?

Hallo,
ich bin neu hier und habe mich mal angemeldet um hier und da 
hilfestellungen für meine schulaufgaben zu erhalten.

Hardware :

Mikrocontroller Board mit Atmega 16 und extern 8Mhz Quarz, 8 LEDs 4 
Taster , LDR Widerstand , Temperatursensor, 6 mal 7 Segmentanzeige und 2 
Potis.

Problemstellung:

Entwickeln Sie ein Verfahren, um die Periodendauer eines Rechtecksignals 
an
Taster 4 zu messen.
Verwenden Sie dazu einen Timer, welchen Sie bei einer fallenden Flanke 
des Signals
starten und bei der nächsten fallenden Flanke stoppen. Der Inhalt des 
Zählregisters
ist ein Maß für die Zeit.

Ich weiß jetzt aber nicht wie ich das mit dem Timer machen soll bzw. 
welchen ich nehmen muss.

Weiter oben im Programm steht bei mir :

#include "delay.h"
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>

#define  JA    1
#define  NEIN  0

// ------------Externe Tacktvorgabe ---------8Mhz Quarz
//Geschwindigkeitsteiler auf "1Mhz "

volatile unsigned int Counter;

ISR( TIMER0_OVF_vect )       // alle 0.000128 Sekunden / 8 Mhz
{  static uint16_t  Counter=0;

  Counter++;

  if( Counter == 1000 ) // Zählerschleife 0-1000
  {
    Counter = 0;
  }
}

-------------------------------------------------------------

Das brauche ich ja wohl nicht alles ;-)

von Jan S. (guppi788)


Lesenswert?

Habe noch was gefunden, ich denke damit hat es was auf sich ;-)

Autor: Ballermann (Gast)
Datum: 20.11.2011 20:22

Da musst Du nur einstellen auf was für Flanken (positive Flanke/negative
Flanke oder positiver/negativer Pegel) reagieren soll. Dann wird mit
einem Bit glaub ich noch der INT0 freigegeben.

Mit sei() wird der globale Interrupt freigegeben.

Und dann halt noch der "Funktionsaufruf" für den Interrupt mit
ISR(Speicheradresse).

Headerdatei nicht vergessen.

-----------------------------------------------------------------------

Also meine Adresse weiß ich vom taster dann muss ein port am atmega 16 
auf eingang geschaltet werden der dieses " Prellende " Signal vom Taster 
4 aufnimmt und einen vergleich zum systemtackt herstellen mit passendem 
teiler um einen zählwert zu erhalten. so habe ich das richtig verstanden 
?

von troll (Gast)


Lesenswert?

Jan Sperling schrieb:
> Also meine Adresse weiß ich vom taster dann muss ein port am atmega 16
> auf eingang geschaltet werden der dieses " Prellende " Signal vom Taster
> 4 aufnimmt und einen vergleich zum systemtackt herstellen mit passendem
> teiler um einen zählwert zu erhalten. so habe ich das richtig verstanden
> ?
Mann Oh Mann, dein Geschreibsel liest sich vielleicht...

Die Aufgabe ist doch trivial, der Lösungsweg steht in der 
Aufgabenstellung. Timer initialisieren, im Hauptprogramm warten auf 
fallende Flanke, Timer starten, warten auf steigende Flanke, Timer 
stoppen und auslesen. In Wirklichkeit sollte man vorm Detektieren der 
steigenden Flanke eine gewisse Mindestzeit warten um den Taster zu 
entprellen.

von Lutz (Gast)


Lesenswert?

Bis auf Stoppen bei fallender statt steigender Flanke hast du leider 
recht ...

Wer sich mit so trivialen Aufgaben nicht selber beschäftigt, lernt gar 
nix und kommt deshalb auch nicht ein Stück weiter.

von Lutz (Gast)


Lesenswert?

Ach, nun habe ich doch glatt noch den obligatorischen konstruktiven Link 
vergessen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

von troll (Gast)


Lesenswert?

Lutz schrieb:
> Bis auf Stoppen bei fallender statt steigender Flanke hast du leider
> recht ...
wie meinst du das?

von Amir Troglodim (Gast)


Lesenswert?

> Das brauche ich ja wohl nicht alles ;-)

Ein Einzeiler waere gefragter ?


>>Lutz schrieb:
>> Bis auf Stoppen bei fallender statt steigender Flanke hast du leider
>> recht ...
>wie meinst du das?


Egal. Mach's einfach mal. Sonst wir da nie was. Allenfalls zusammen mit 
einem klassenkameraden.

von Lutz (Gast)


Lesenswert?

troll schrieb:
> wie meinst du das?

Technisch:
Eine Periodendauer ist die Dauer einer vollständige Periode. Also bis 
die Periode wieder an der "gleichen Stelle" angelangt ist. Wenn also der 
Begin bei fallender Flanke sein soll, ist die Periode auch erst wieder 
bei fallender Flanke zu Ende. Wenn man bei steigender Flanke schon 
aufhört, hat man erst eine halbe Periodendauer hinter sich. Wobei das 
Rechtecksignal auch nicht weiter beschrieben wurde. Die zweite Hälfte 
kann ja eine andere Dauer haben als die Erste; man könnte dann noch 
nicht mal sicher sagen, daß man bei halber Periode auch die halbe Zeit 
hinter sich hat und somit die Periodendauer berechnen. So z.B. bei einer 
Rechteck-PWM. Eine Periode muß also nicht zwingend aus zwei gleich 
langen Hälften bestehen. Und schon gar nicht, wenn sie mechanisch "frei 
Schnauze" an einem Taster eingegeben wird.

"Pädagogisch":
Ganz offensichtlich hat der TO nicht den Ansatz einer Ahnung von der 
Materie (was, wie, warum, Grundlagen Software, Grundlagen Hardware, 
strukturiertes Vorgehen usw.). Und scheint sich auch nicht damit 
beschäftigen zu wollen; rotzt da stattdessen so eine "Frage" dahin. 
Deshalb wird es ihn auch überhaupt nicht weiterbringen, wenn ihm hier 
jemand bei einer so trivialen Einsteigeraufgabe, welche gut zum Lernen 
geeignet ist, die fertige Lösung gibt. Hier ist nämlich der Weg das 
Ziel. Die nächste Frage würde vermutlich sein "und wie bestimme ich die 
Periodendauer jetzt bei Start mit steigender Flanke?". So kann jeder 
Lehrer sofort rausfinden, ob der Schüler die Materie verstanden hat oder 
nur irgendwie an ein Ergebnis gekommen ist.
Das AVR-GCC-Tutorial ist über viele Jahre entstanden und wirklich gut 
zum Lernen geeignet.

von troll (Gast)


Lesenswert?

Lutz schrieb:
> troll schrieb:
>> wie meinst du das?
>
> Technisch:> [...]

Argh! Du hast natürlich Recht, ich hatte "bestimmen sie die Dauer des 
Tastendrucks gelesen". Aber gut, macht die Sache nur unwesentlich 
komplizierter.

von troll (Gast)


Lesenswert?

troll schrieb:
> ich hatte "bestimmen sie die Dauer des
> Tastendrucks" gelesen
weil der TO in seinem 2. Beitrag irgendwas von einem Taster erzählt.

von Jan S. (guppi788)


Lesenswert?

Ich finde es ja sehr interessant wie freundlich man in diesem Forum 
empfangen wird ! die leute kennen einen nicht mal und schon wird man als 
faul hingestellt.

wenn ich meine umstände noch bevor ich nach einen 19 stunden tag in 
wenigen minuten in mein bett falle erläutern darf.

Ich mache Konti schicht 2 tage früh , zwei mittag , zwei nachtschicht 
und habe 2 tage frei. eigentlich nur 1,5 weil den ersten verschläft man 
halb !

zusätzlich habe ich 2 mal die woche abendschule von 16.45 uhr bis 21,30 
uhr.
das bedeutet um 16 uhr losfahren und um 22 uhr zu hause sein oder auf 
nachtschicht wie es gerade so fällt. in der schule gibt es noch 4 
weitere fächer mit genug material an elektrotechnik.
ich denke jeder hat seine schwerpunkte und interessen.
im prinzip habe ich diese auch am microkontroller doch fehlt mir die 
zeit für solch weitreichende experimente. ich kann mich nicht 
nachmittags hinsetzten und stundenlang im tutorial lesen und 
ausprobieren. ich habe auch noch genug wissenslücken aufgrund der 
umstände. meine freundin sieht mich auch nur noch 1 mal die woche, nicht 
gerade förderlich für eine beziehung.

ich glaube solche umstände haben das die wenigsten und so lässt sich 
unglaublich schwierig lernen !

ich möchte doch nur hilfestellungen haben und denkanstöße.

ich komme einfach nicht mit den befehlen klar beim programmieren. eine 
SPS ist da kein problem, man kennt die bausteine und funktionen und weiß 
wie man diese einsätzt doch hier ist das wie ich es finde sehr schwer ! 
so gute nacht !

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.