Mega8: Ein kompletter Port (B oder D) plus 2 Taster (Interrupt)

Gast #2965025
Lesenswert?

Eine Frage an die Kreativen: Ich möchte gerne einen Mega8 verwenden für 
einen Frequenzgenerator. Dafür brauche ich einen Port komplett frei. Da 
ich auch einen Quarz anschließen will bzw. der Generator recht genau 
gehen soll, fällt PortB schon weg. Also Port D nehmen, Aber: Da sitzen 
Int0 und Int1, die ich eigentlich für meine 2 Bedientasten verwenden 
will.

Der Code läuft in Assembler und ist sehr zeitkritisch. Deshalb also 
keine Polling und keine halben Ports. Am einfachsten wäre es, einen 
andren Chip zu nehmen, aber das kann ja jeder.. :-)

Also Frage: Wie kann ich in dieser Konstellation noch mit mindestens 
einer Taste + Beschaltung einen Interrupt erzeugen (also ohne INT0 und 
INT1)?
#2965081
Lesenswert?

So etwas geht schon und zwar "von hinten durch die Brust ins Auge" ;-)
Und zwar könntest Du den SPI-Interrupt für die Taster benutzen. Dazu den 
Timer 1 als CTC programmieren, SPI als Slave. OC1A mit SCK verbinden, 
Pull-Ups an SS und MOSI. Taster 1 setzt SS über eine Diode auf GND und
Taster 2 SS und MOSI. Wird jetzt ein Taster gedrückt, so wird SS 
aktiviert und nach 8 Takten ein SPI-Interrupt ausgelöst.
Im letzten Bit von SPDR steht dann, welcher Taster gedrückt wurde. 
Allerdings ist diese Art von Interrupt eher Zustands- als 
Flankengesteuert.

Jörg
Gast #2965097
Lesenswert?

@Jörg - das ist genial! aber warum nur im letzten Bit - es müssten doch 
alle Bits im SPDR betroffen sein, oder meintest Du weil es prellen 
könnte?

@Cris
doch das passt: Wenn ich die Bedientasten drücke, hab ich alle Zeit der 
Welt und die Anzeige anzusteuern etc. Wenn der Generator aber läuft, 
braucht ein Durchlauf 9 Takte. 1 Takt mehr fürs Polling oder sogar 2 
sind dann >10 oder >20% Auflösung weniger. Deswegen möchte ich diese 
Schleife aus den 9 Takten per Interrupt und nicht per Polling 
unterbrechen.
Gast #2965326
Lesenswert?

Da würde ich doch zu gerne mal das Konzept sehen was da hinter steht.
Also Was soll Wie gemacht werden.

Was ist die Max Frequenz die du darstellen willst.
Wie soll der Signalverlauf der Frequenz sein, mit welcher Auflösung ?

Ich gehe davon aus, wenn das Konzept sinnvoll geändert ( oder erst mal 
erstellt ) wird, bekommst du einen µC der vor Langweile nicht weiß was 
er tun soll.

frq_gen schrieb:
> doch das passt: Wenn ich die Bedientasten drücke, hab ich alle Zeit der
> Welt und die Anzeige anzusteuern etc. Wenn der Generator aber läuft,
> braucht ein Durchlauf 9 Takte.

Das ist doch schon ein fauler Kompromiss.
Wenn eine Frequenzänderung gemacht wird, will man doch normalerweise 
eine Unterbrechungsfreie Umschaltung auf die neue Frequenz, optimal beim 
Nulldurchgang.
Den Generator abschalten, dann umstellen und wieder einschalten ist doch 
Murks.

frq_gen schrieb:
> Wenn der Generator aber läuft,
> braucht ein Durchlauf 9 Takte. 1 Takt mehr fürs Polling oder sogar 2
> sind dann >10 oder >20% Auflösung weniger.

Vergiss es, das wird nie auf Dauer stabil und zuverlässig laufen. Es sei 
denn du machst soviele Einschränkungen für die restlichen Funktionen das 
der µC NICHTS anderes mehr macht als den Ausgang zu treiben
.

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