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)?
frq_gen schrieb: > Aber: Da sitzen > Int0 und Int1, die ich eigentlich für meine 2 Bedientasten verwenden > will. Gefährliches Thema. Beitrag "Entprellen von Schalter mit Interrupt und PinChange" Versuch es mit Polling, dann kannst du jeden Pin für die Tasten nehmen.
nee, das ist nicht gefährlich, wenn man es nicht so eilig hat: Wenn ich in der ISR bin, schalte ich erstmal die Interrupts aus und warte ein paar Millisekunden, das geht schon. Und Polling dauert zu lange, selbst 1 Takt. Ich hab irgendwie auf einen Trick mit TWI gehofft..
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
frq_gen schrieb: > warte ein > paar Millisekunden ISR und Warten, alles sehr zeitkritisch? Das passt nicht zusammen. und dann nicht mal zum polling 1 Takt haben?
Unabhängig davon, ob Tasten über Interrupts sinnvoll sind: Nimm einen ATmega88 statt dem total veralteten ATmega8. Der ist pinkompatibel und Du kannst auf jeden Pin einen PCINT aktivieren. Man muss sich das Leben nicht unnötig schwer machen.
Frank M. schrieb: > Nimm einen ATmega88 statt dem total veralteten ATmega8. Der ist > pinkompatibel und Du kannst auf jeden Pin einen PCINT aktivieren. Und 20MHz kann der auch noch. mfg.
@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.
Na guuut, das Datenblatt vom Mega88 guck ich mir auch an :-)
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. weißt du dass du deine Frequenz nicht per Software erzeugen musst? der uc hat dafür extra Hardware!
Walter schrieb: > weißt du dass du deine Frequenz nicht per Software erzeugen musst? > der uc hat dafür extra Hardware! Er will wohl eher ein Byte auf einen DAC geben. Deswegen auch ein ganzer Port, um das nicht noch portionsweise bitfriggeln zu müssen. mfg.
@frq_gen du könntest deine beiden Tasten mit einer Dioden-OR-Verknüpfung an PB0 anschließen und eine zusätzlich an einen anderen Pin und den ICP-Int nehmen um den Tastendruck zu detekieren. Im INT kannst du dan schauen, welche Taste gedrückt wurde. Sascha
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 .
So viele Zweifel zerstreue ich doch gerne.. :-) Das Konzept ist hier sehr schön erklärt: http://www.myplace.nu/avr/minidds/ Während der Umstellung brauche ich kein Ausgangssignal, dann aber möchte ich ein möglichst genaues.
Sascha Weber schrieb: > Dioden-OR-Verknüpfung ICP ist auch gut, wie meintest Du das mit der Dioden - OR Verknüpfung ?
Sorry hatte wohl ein Brett vorm Kopf, wahrscheinlich so - müsste klappen, oder? 5V | | +-------------+-------------+ | | |R| |R| | | | | PortB(n)------+-----------|<|-------------+-------PortB(0) = ICP | | \ S1 \ S2 | | GND GND
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.