Lasse ich den string '> USART Ready to use' vor dieser Funktion
ausgegeben, wird dieser immer erneut ausgegeben. Die Nachrichten vom
UART sehe ich in HTerm.
Bei einem Atmega328p läuft die Config Funktion ohne änderungen durch.
Johannes schrieb:> ich habe ein nrf24l01 modul an einem attiny2313. Doch dieser resettet> sich automatisch nach/in der Konfiguration
Hallo!
Damit ich das Problem richtig verstehe, seien ein paar Rückfragen
erlaubt:
Was bedeutet der Schrägstrich? Manchmal "nach" und manchmal "in" der
Konfiguration? Oder ist der Zeitpunkt einfach nicht bekannt?
Schaltung? Kondensator vergessen?
Markus W. schrieb:> Oder ist der Zeitpunkt einfach nicht bekannt?
genau. Wenn ich die uart-Nachricht vor dieser Funktion rausgebe, wird es
immer wiederholt. Wenn ich diese Nachricht erst danach rausgebe, wird
sie gar nicht rausgeschickt.
Am Attiny habe ich zwischen Vcc und Gnd einen 100nF Kondensator.
Zwischen Vcc und Reset habe ich einen 10kOHM Widerstand.
Werde die Schaltung mal skizzieren und hochladen
Johannes schrieb:> Am Attiny habe ich zwischen Vcc und Gnd einen 100nF Kondensator.> Zwischen Vcc und Reset habe ich einen 10kOHM Widerstand.
Dann ist hardwareseitig vermutlich alles ok...
Hört sich für mich so an, als wäre ein Interrupt aktiviert, aber der
zugehörige Interruptvektor nicht gesetzt (oder die benötigte
Interrupt-Routine nicht definiert).
Könnte natürlich auch ein Stack-Überlauf sein oder etwas ähnlich
Unanständiges.
Markus W. schrieb:> Hört sich für mich so an, als wäre ein Interrupt aktiviert, aber der> zugehörige Interruptvektor nicht gesetzt (oder die benötigte> Interrupt-Routine nicht definiert).
Als Interrupt habe ich eigentlich nur USART, Timer0 und INT0
1
void usart_init(unsigned int ubrr){
2
/* Set Baud-Rate */
3
UBRRH = (unsigned char) (ubrr >> 8);
4
UBRRL = (unsigned char) ubrr;
5
/* Enable Receiver and Transmitter and receiver-interrupt*/
Die Interrupt Routinen sind auch erstellt
ISR(INT0_vect){
...
}
ISR(USART_RX_vect){
...
}
ISR (TIMER0_COMPA_vect){
...
}
[/code]
Markus W. schrieb:> Könnte natürlich auch ein Stack-Überlauf sein oder etwas ähnlich> Unanständiges.
Kann ich das irgendwie überprüfen?
Ich bin mal in der Funktion reingegangen und wollte gucken, wann der
Controller resettet wird.
Wenn ich hinter dem letzten Funktionsaufruf 'nrf24_powerUpRx();' die
Nachricht herausschicke, wird diese herausgeschickt. Damit ist ja
eigentlich die Funktion nrf24_config fertig und es wird wieder in die
main-Funktion gesprungen. Wenn ich dann dort die Nachricht schicke,
bleibt es beim Reset.
Spendier' uns mal die vollständige main-Routine.
Muss aber nicht sein...
Wenn der String ständig ausgegeben wird, heißt das doch nur, dass der
Kerl ständig von vorne anfängt. Der Fehler kann aber auch hinter der
Ausgaberoutine liegen.
Mit einem "ordentlichen" Fehler auf dem Stack, kann die Testsequenz auch
von wer-weiß-wo aufgerufen werden. Speicherfehler oder schlampige
Indizes sind hierbei sehr beliebt.
Ich klammere in solchen Fällen einfach, von vorne beginnend alle
möglichen Kandidaten aus. Natürlich ohne die Initialisierung der
seriellen Schnittstelle.
Johannes schrieb:> Markus W. schrieb:>> Könnte natürlich auch ein Stack-Überlauf sein oder etwas ähnlich>> Unanständiges.>> Kann ich das irgendwie überprüfen?
du kannst das RAM mit einem definierten Wert füllen und bei Reset
schauen wie viel davon noch übrig ist,
einfacher ist es den 4313 zu nehmen mit doppelt soviel RAM
Es lag wirklich am Speicher.
Eigentlich bekomme doch bei Atmel Studio 7 eine Fehlermeldung, wenn zu
viel Speicher benutzt wird. Dies war hier aber nicht der fall. Habe
jetzt die UART-Narchichten herausgenommen und das Data-Memory-Usage ist
geringer geworden. Jetzt läuft das PRogramm durch. Zwar nicht richtig,
aber für heute reicht das erst mal.
Johannes schrieb:> Eigentlich bekomme doch bei Atmel Studio 7 eine Fehlermeldung, wenn zu> viel Speicher benutzt wird. Dies war hier aber nicht der fall.
Das betrifft aber nur den fest belegten Speicher. Was für den Stack
dynamisch noch benötigt wird weiß der Compiler aber nicht und hängt u.A.
von der Schachtelungstiefe der SW ab.