50 IO´s pollen?

Gast #1746019
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
Gast #1746022
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
Gast #1746023
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.
Gast #1746036
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
Gast #1746051
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
Gast #1746086
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
Gast #1746095
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren