Forum: Mikrocontroller und Digitale Elektronik ADW mit 80C537 (timer interrupt)


von Christian M. (Gast)


Lesenswert?

Hi!

Ich suche Hilfe bei einem Programm das ich für die Schule entwickeln 
muss.
Es soll mittels eines Timer-Interrupts die interrupt-service-routine 
alle 1µs aufrufen, und dann das Signal vom ADW einlesen.

Würde mich sehr über eure Hilfe und Ideen freuen, danke schonmal im 
Voraus!

mfg Chris

von MC (Gast)


Lesenswert?

>alle 1µs aufrufen, und dann das Signal vom ADW einlesen.
1µs ist aber sehr kurz, da der 80c537 ja maximal mit 16MHz arbeitet.

>Ich suche Hilfe bei einem Programm das ich für die Schule
>entwickeln muss.
Wobei brauchst du den Hilfe? Beim Timer oder beim AD-Wandler?

von Christian M. (Gast)


Lesenswert?

was wäre dann die niedrigste Zeit die mit dem 80C537 möglich ist?

Hilfe bräuchte ich möglichst für beides, allerdings bin ich auch schon 
froh wenn mir jemand beim Timer helfen kann.

Beim AD-Wandler muss ich die Signale von 2 Sensoren einlesen, welche 
0-24V liefern. Laut Datenblatt ist aber nur 0-5V möglich, deshalb 
schalte ich noch einen Spannungsteiler vor die Ports.
Hier bitte ich auch um eure Hilfe, hab sowas noch nie gemacht, und weiß 
nicht wie ich die Ports des ADW's anspreche bzw. auslese.

Danke im Voraus, Chris

von MC (Gast)


Lesenswert?

Wie gut kennst du dich denn mit den Timern aus?

von Oliver D. (smasher)


Lesenswert?

Wie ist die Frequenz deines quarzes?
Dann rechnest du aus, wie lange es dauert z.B. den 16bit timer 
überlaufen zu lassen.
Die Zahl multipliziert mit den überläufen, die du für 1us brauchst!

Dann schreibst du dir ne interrupt routine, die bei jedem überlauf eine 
variable erhöht. Wenn du z.b. 5 überläufe für 1us brauchst, schreibst du 
dann noch in die ISR:
if(ueberlauf==5)
{
AD Wandlung starten...
}

so könnte man das machen.
Gibt aber natürlich mehrere möglichkeiten.

gruß
oliver D.

von Chris_R (Gast)


Lesenswert?

Hallo Christian,

wieso soll der AD-Wandler per Timer-Interrupt abgefragt werden ? Er hat 
doch ein Busy-Flag, das anzeigt, wann er seine Wandlung abgeschlossen 
hat. Das Flag kann auch einen Interrupt auslösen.

von Peter D. (peda)


Lesenswert?

Christian M. wrote:
> Ich suche Hilfe bei einem Programm das ich für die Schule entwickeln
> muss.

Hilfe wird hier in der Regel so verstanden:
Du zeigst her, was Du bisher schon geschafft hast und fragst konkret, wo 
es jetzt bei Dir klemmt.

Dir jedoch das fertige Programm auf nem Silbertablett zu servieren, 
herrscht hier eine ziemliche Abneigung.

Wenn Du aber schon Probleme mit dem Urschleim der Programmierung hast, 
solltest Du Dir erstmal ein Lehrbuch (z.B. 8051 Cookbook) schnappen oder 
nach Tutorials googlen. Es wird aber gewiß keine Sache von nur 14 Tagen, 
die absoluten minimalen Grundlagen zu lernen.


> Es soll mittels eines Timer-Interrupts die interrupt-service-routine
> alle 1µs aufrufen, und dann das Signal vom ADW einlesen.

Kannste voll vergessen, die 1µs lasten selbst einen 100MIPS Silabs 8051 
gut aus.
Für nen Standard-8051 ist 1ms ne gute Zeit (100µs für nen erfahrenen 
Programmierer).


Peter

von MC (Gast)


Lesenswert?

Ich glaub, dass der interne AD-Wandler eine maximale Abtastfrequenz von 
ca. 40kHz hat. Außerdem ist 1µs wirklich sehr kurz. Waren dass 
vielleicht doch 1ms. Oder 1s? Ich kenne keine Größe, die 1Millionen mal 
pro Sekunde überprüft werden muss.

von Magnus Müller (Gast)


Lesenswert?

Der 80C537 benötigt für 1 Maschinenzyklus 12 Oszillatorperioden. Bei 
16MHz schafft der in 1µs noch nicht mal 2 Befehle.

von Peter O. (Gast)


Lesenswert?

Ich hätte auch eine Frage zu dem Thema, bezüglich der Berechnung der 
Tickrate des Timers.

Wenn mein Oszillator eine Frequenz von 12MHz hat, so beträgt die 
Zählrate laut Manual 1/12 der Oszillator Frequenz.

Und wie finde ich nun heraus, wieviele Überläufe ich brauche um alle 1ms 
einen Interrupt auszulösen?

Danke für eure Hilfe

von Thomas (Gast)


Lesenswert?

> Und wie finde ich nun heraus, wieviele Überläufe ich brauche um
> alle 1ms einen Interrupt auszulösen?

mit dem Taschenrechner :-)

Spass bei Seite bei 1ms und 12MHz gibt es gar keine Überläufe.
Einfach T2 im AutoReload Modus benutzen und T2 mit -1000
imitialiesiern, dann bekommst du einmal pro ms einen Interrupt.

Die Rechnung ist eigendlich ganz einfach:
12 MHz Takt ergibt einen timertick von 1µs. nach 1000 ticks ist
eine ms erreicht. Da die Timer 16 bit gross sind gäbe es erst nach
65 ms einen Überlauf.

Thomas

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.