www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arm7 Grundlagen


Autor: American Dad (americandad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich soll mich für meine Firma, nebenbei, ein wenig in Richtung 
Mikrocontrollerprogrammierung weiterbilden, da man denkt das könnte man 
mal brauchen. Konkret hab ich dafür einen Arbeitstag/Woche 
freigeschaufelt bekommen. Habe etwas eingerostete, aber durchaus ganz 
gute C Kenntnisse.

Habe mich für einen Arm7 entschieden, also AT91SAM7x-EK, Rowley 
Crossstudio + Jtag Interface organisiert. Wollte erstmal mit FreeRTOS 
rumexperimentieren, den Code verstehen etc.

Jetzt, nach langem lesen in der Doku von Atmel wollte ich darauf 
aufbauen und sachen zum FreeRTOS ergänzen.

Von einem Sensor bekomme ich ein Signal, vondem die Zeit der einzelnen 
Peaks messen möchte.

Signal liegt am PIO Controller an.
Mit den Registern komme ich soweit klar.
Nur eine ganz blöde Frage habe ich, wie erkenne ich möglichst effektiv 
eine fallende Flanke an einem IO Pin?

Stells mir grad so vor:
for (;;){
 
 if (steigende Flanke kommt) {
  starte Timer TC0;
 }
 if (fallende Flanke kommt) {
  Timerwert TC0 = array[x];
  Timerreset TC0;
  x++;
}
Also mal ganz banal aufgeschrieben. Wie ich den Timer 
starte/stope/resete etc. ist mir alles klar. Nur wie lass ich den Timer 
am klügsten auf die Flanken reagieren?
   __________            ______
  /           \          /       \
 /|<-  t1  ->| \        / |< t2>| \
/               \______/           \___ usw.

Zeit t1 und t2 möchte ich messen, diese Zeite variieren.

( Aus irgendeinem Grund wird die "high level linie" durchgezeichnet, 
bitte unterbrochen vorstellen)

Wäre echt sehr dankbar für gute Ratschläge.

Da ich ja die Zeit habe mich sehr intensiv damit zu beschäftigen 
überlege ich auch irgendwann mal meine Erfahrungen zu einem kleinen 
Beginners Tutorial zusammenzufassen. Von einem dann hoffentlich 
ehemaligem Einsteiger für den Einsteiger... aber da ist es noch lang 
lang hin ;)

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void wait_rising_edge()
{
  while ( level == high )
    ;
  while ( level == low )
    ;
}

Autor: American Dad (americandad)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja das ist mir ja schon klar soweit, nur muss man das ja irgendwie 
greifen.
Also wie sag ich dem µC wann high level ist?
Vielleicht erlege ich gerade einem großen Denkfehler und es ist 
vermutlich nicht sonderlich schwer, aber irgendwie ist mir das nicht 
klar.

Also womit erkennt der µC das?

Autor: Christian J. (elektroniker1968)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

normalerweise macht man sowas aber mit den Capture/Compare Registern 
eines uC, die sind flankengesteuert. Der Code  da oben schmiert doch ab, 
wenn das Singla nicht kommt. Und da der ARM schöne 64 Bit Timer Register 
hat (zumindest der LPCxxx) kann man damit auch 22.000 Jahre Perioden 
messen :-)

Ach ja, für einen uC ist HIGH dann, wenn die Spannung am Pin über der 
Threshold Voltage liegt und die für jeden Bereich 1,8V , 3.3V, TTL 
anders.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als erstes muss man mal die Randbedingungen festhalten.
Welche Wiederholfrequenz hat das Signal?
Mit welcher Auflösung möchte ich messen?
Welches sind die kürzesten und längsten Peaks die vorkommen und 
ausgewertet werden sollen?
Soll der Rechner "parallel" noch was Anderes machen? Oder darf er sich 
ganz dieser Aufgabe widmen (wenig Praxisgerecht)?
Erst wenn das geklärt ist, kann man entscheiden, ob man mit Pollen 
zurechtkommt oder ob man mit Hardwareeinheiten (Capture/Compare) 
arbeiten kann oder sogar muss.

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.