Forum: Mikrocontroller und Digitale Elektronik 50 IO´s pollen?


von Spice (Gast)


Lesenswert?

Hallo Zusammen,

ich wollte mal fragen, ob es SICHER möglich ist, 50 IO-Pins zu pollen, 
wenn ein Mega2560 eigentlich nichts anderes macht als auf ein PIN-Change 
an den 50 IO´s zu warten und dann ein wenig auf der seriellen klimpern.
Der Controller arbeitet mit 7.3728MHz und die minimale Impulslänge an 
den Eingängen die sicher detektiert werden sollen, kann 1ms betragen. 
Ist das möglich? Wie rechnet man sowas? In Main() werden also einfach 
nur 6 PORTs gepollt eingelesen und mit einer Referenz verglichen. Wie 
lange dauert sowas? Ich glaube die Frage richtet sich an die ASM-Gurus

Danke und Gruß
Spice

von Kai Klaas (Gast)


Lesenswert?

Was soll denn genau detektiert werden? Nur ob ein Pin für mindestens 
1msec seinen Pegel wechselt oder das Anliegen einer speziellen 
Impulsfolge?

Beim Tastenentprellen gibt es doch das Verfahren mit den vertikalen 
Zählern. Damit könnte man immer 8 Eingänge auf einmal untersuchen.

Kai Klaas

von Michael M. (Gast)


Lesenswert?

willst du denn auch informationen über die impulslänge?
wenn nicht, gilt einfach nur das abtasttheorem und deine minimale 
polling-frequenz ist 2/(1ms*).
das schafft dein µC locker.

probleme kriegst du erst, wenn ein burst an pulsen auf verschiedenen 
eingängen kommt, der dann deine uart verstopft.

von Spice (Gast)


Lesenswert?

Danke schon mal,

ist einfach nur ein Puls, bzw. ein kurzzeitiges Wechseln von High auf 
Low...
Entprellen wollte ich eigentlich nicht. Wenn sich an den Pins was ändert 
setze ich ein flag und lese die Ports nicht mehr ein, solange ich mit 
der seriellen Ausgabe durch bin. Das sollte die eventuellen störer 
vermeiden. Informationen über die Impulslänge brauche ich nicht. Ich 
muss nur wissen, welcher Pin sich geändert hat.
Danke nochmal und Gruß
Spice

von Kai Klaas (Gast)


Lesenswert?

>Entprellen wollte ich eigentlich nicht.

Es ging mir nicht ums Entprellen, sondern vielmehr um eine Methode 8 
Eingänge gleichzeitig und zuverlässig auf eine Pegeländerung hin zu 
untersuchen.

Kai Klaas

von Anja (Gast)


Lesenswert?

Spice schrieb:
> In Main() werden also einfach
> nur 6 PORTs gepollt eingelesen und mit einer Referenz verglichen. Wie
> lange dauert sowas?

2  Takte Referenz Port 1 in Register
1  Takt  I/O-Port 1 in 2. Register
1  Takt  XOR beide Register
2  Takte Ergebnis speichern oder Jump zur Behandlungsroutine

das ganze 6 mal = 36 Takte = 5 us bei 7,3 Mhz
Du brauchst für die Abfrage der Pins also weniger als 1% Rechenzeit.

Gruß Anja

von Michael M. (Gast)


Lesenswert?

Anja schrieb:
> 2  Takte Referenz Port 1 in Register
> 1  Takt  I/O-Port 1 in 2. Register
2 takte für latch und einlesen.
> 1  Takt  XOR beide Register
> 2  Takte Ergebnis speichern oder Jump zur Behandlungsroutine
hin- und rücksprung in die ISR inkl retten und wiederherstellen der 
register: ~20 takte.

die änderung um eine größenordnung ist trotzdem nicht problematisch.

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.