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
>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?
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
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.
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.
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
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.
Der 80C537 benötigt für 1 Maschinenzyklus 12 Oszillatorperioden. Bei 16MHz schafft der in 1µs noch nicht mal 2 Befehle.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.