ISP Programmer - kein Connect zum Atmega328 ?

Hallo,
Es handelt sich hier um ein selbst erstelltes PCB mit einem fabrikneuen Atmega328P.

Im Prinzip ist es die übliche Grundschaltung, der 328P soll später mit einem 16mhz Quarz laufen.
Dies ist auch verbaut incl. den beiden Kerkos.

Ein 10Poliger ISP Stecker ist natürlich auch drauf.

Wenn ich nun mit den Atmel Studio die Fuses auslesen will, wird kein Connect aufgebaut.
Ein Test mit einem fertigen Atmega RN Board ist erfolgreich, der Programmer funktioniert also.

Ich habe die Spannungsversorgungen des Atmega328P mehrmals geprüft.
Auch die Verbindungen vom Atmega zum ISP Stecker auch mehrmals durchgemessen.

Der Reset Pin des Avr ist mit 10k auf 5V gezogen, sollte passen.

Wenn ich am Quarz einen Frequenzzähler anschliesse, läuft der Oszillator nicht.
Ist das normal - Wenn der Atmega auf internen Oszillator gefused ist ?

Mir gehen so langsam die Ideen aus wo der Fehler liegt.

rudirabbit:
Hallo,
Es handelt sich hier um ein selbst erstelltes PCB mit einem fabrikneuen Atmega328P.

Im Prinzip ist es die übliche Grundschaltung, der 328P soll später mit einem 16mhz Quarz laufen.
Dies ist auch verbaut incl. den beiden Kerkos.

rudirabbit:
Ein 10Poliger ISP Stecker ist natürlich auch drauf.

Warum 10polig? Der hat keinerlei Vorteile gegenüber dem 6poligen.

rudirabbit:
Wenn ich nun mit den Atmel Studio die Fuses auslesen will, wird kein Connect aufgebaut.
Ein Test mit einem fertigen Atmega RN Board ist erfolgreich, der Programmer funktioniert also.

Wie hoch ist dein ISP Clock eingestellt? 125kHz?

rudirabbit:
Ich habe die Spannungsversorgungen des Atmega328P mehrmals geprüft.
Auch die Verbindungen vom Atmega zum ISP Stecker auch mehrmals durchgemessen.

Der Reset Pin des Avr ist mit 10k auf 5V gezogen, sollte passen.

Höert sich soweit passend an.

rudirabbit:
Wenn ich am Quarz einen Frequenzzähler anschliesse, läuft der Oszillator nicht.
Ist das normal - Wenn der Atmega auf internen Oszillator gefused ist ?

Würde behaupten, ohne es getestet zu haben, dass er nicht ohne anläuft.

Warum 10polig? Der hat keinerlei Vorteile gegenüber dem 6poligen.

Weil mein ISP einen 10 Poligen Anschluß und Kabel hat.

Mein Problem ist das ich das fu***ng Teil nicht programmieren kann und ich den Fehler nicht sehe.

Wie hoch ist dein ISP Clock eingestellt? 125kHz?

Im Atmel Studio ist 1.000 MHz voreingestellt, damit funzt der Connect zum RN Mega Board.

Konnte die Ursache sein, mit geht aber gerade die Zeit aus um dies zu testen.

Mache ich morgen...

Im Prinzip ist es die übliche Grundschaltung, der 328P soll später mit einem 16mhz Quarz laufen.
Dies ist auch verbaut incl. den beiden Kerkos.

Für mich ist die Grundschaltung, + an - und - an + und schon kann man damit alles machen :smiley:
Welchen Kerko haste da dran?
Hier die Grundschaltung, nur 1 Post drunter:

Dein ISP Clock ist für das Fuse setzten zu hoch.

Vom Werk aus hat der Atmega einen Takt von 1Mhz. Interner Osc. läuft zwar mit 8MHz, jedoch sogar die Fuseeinstellung CKDIV8 dafür, dass jeder 8 Takt nur gezählt wird.

ISP Clock auf < 250kHz setzen, Fuses richtig setzen und danach kannst du den ISP Clock bei Bedarf wieder hochsetzen.

Skorpi, dass aber schon ne extended Grundschaltung :wink: Für ne Grundschaltung kann vorerst auf der Quarz und auch die Lastkondensatoren weggelassen werden.

sschultewolters Erklärung deckt sich mit meinen Überlegungen. Darum funktioniert es mit dem RN Mega Board weil diese eben auf schon 16mhz ext. gefuzt ist.

Der 328 ist von Werk aus auf den Internen 1Mhz Clock gestellt.

Somit kann meine alte Einstellung nicht funktionieren.

Ich habe aber Bedenken ob mein ext. Oszilator anschwingt wenn ich die Fuses entsprechend setze.
Laut einer Formel wird der Wert der Kerkos mit 2*kapazität des Quarzes -Kapazität der Leiterbahnen berechnet.

Die Kapazität des Quarzes steht im Datenblatt und die Kapazität der Leiterbahnen mit ein paar pF geschätzt komme ich auf 56P Kerkos.

Denke der Wert ist etwas zu groß. Das stellt sich heute Abend heraus wenn ich die Fuses setzte.
Wenn ich danach mit den alten ISP Clock Einstellungen nicht mehr mit dem 328 reden kann weiß ich woran es liegt.

Aber erst mal Danke für den Typ mit den ISP Clock Einstellungen.
Mal sehen was ich heute abend zu berichten habe.

22pF Kerkos für den 16Mhz. Mit 18pF wollte es bei meinen Tests nicht laufen.
Habe immer alles auf die Platine gelötet, da war der Atmega ja auch noch mit 1 Mhz eingestellt.
Danach mit dem ISP den Bootloader gebrannt und die Fuses waren gesetzt.

Kaum macht man es richtig schon funktioniert es :wink:

Ist mein erstes Projekt mit einem Virgin Atmega, alles andere waren entweder Arduinos oder Module von RN.
Daher fehlt mir etwas die Erfahrung wenn es um die Fuses geht.

Jetzt finde ich für den 328 diese Fuses die passen könnten:

low_fuses=0xff
high_fuses=0xde
extended_fuses=0x05
low_fuses=0xFF
high_fuses=0xda
extended_fuses=0x05

Der Unterschied in den High Fuses ist:
Boot Flash size=256 words start address=$3F00 bei 0xDE
Boot Flash size=1024 words start address=$3C00 bei 0xDA

Ich will/brauche keinen Bootloader und möglichst viel Flash.
Was bedeutet BOOTSZ genau und was wäre bei mir optimal ?

den Bootloader brauchst du auch nicht. Man brennt den Bootloader nur um die Fuses zu setzen.
Wenn du das erste mal nach dem der Bootloader gebrannt wurde ein Sketch draufladest (mit ISP!), ist der Bootloader weg.
Eigentlich macht es auch kein Unterschied, ob du den Bootloader hast oder nicht.
Wenn bei dir in der Arduino IDE mit Bootloader 30kb anzeigt, zeigt auch ohne den Bootloader 30kb an.
Kannst dadurch nicht mehr Speicher verwenden.

Wo lag der Fehler? Lediglich am zu hohen ISP Clock?

Setz den BOOTSZ auf 256W (256 Words => 512Byte).

Nehm den. Ganz ohne belegten Bootloader Speicher gehts soweit ich weiß nicht.
low_fuses=0xFF
high_fuses=0xda
extended_fuses=0x05

Wo lag der Fehler? Lediglich am zu hohen ISP Clock?

So ist es, ich hatte gestern eher einen Fehler auf dem PCB vermutet (Lötbrücken etc)
In diesem Bereich ist das PCB relativ eng geroutet so das dies denkbar gewesen wäre.

Thema Bootloader, das will ich genauer wissen. :slight_smile:

Eigentlich macht es auch kein Unterschied, ob du den Bootloader hast oder nicht.
Wenn bei dir in der Arduino IDE mit Bootloader 30kb anzeigt, zeigt auch ohne den Bootloader 30kb an.
Kannst dadurch nicht mehr Speicher verwenden.

Das ist nicht wirklich logisch, der Bootloader ist ein Code somit braucht er auch Platz. Wo liegt dieser ?
Der Bootlloader wird im Prinzip nach den Reset zuerst ausgeführt.
Die Anwendung des "Users" liegt im Flash dahinter, Startadresse=Bootloadersize+1.
So war es bei den SAB8051 und deren derivaten.

Bei den Atmels ist das wohl anders ?

Damit wollt ich sagen, wenn in der boards.txt atmega328.upload.maximum_size=30720 drin steht, dann kannst du nicht mehr Speicher nutzen.

Schau dir mal
http://www.mikrocontroller.net/articles/AVR_Bootloader_in_C_-_eine_einfache_Anleitung
an

Schau dir mal
AVR Bootloader in C - eine einfache Anleitung – Mikrocontroller.net
an

Habe es mal grob überflogen, ist im Prinzip genau das was ich wissen will :slight_smile:

Jetzt muss ich euch nochmal nerven.

Ich kann die extended_fuses=0x05 nicht schreiben.
Er zeigt mir immer 0xFD.
Alle anderen werden akzeptiert.

Ich kann Anwendungen flashen, laufen aber nicht.
Der Oszillator schwingt nicht, mit einem Osziloskop geprüft.

Kann aber mit diesen Fuse Einstellungen im AVR Studio den isp Takt auf 1mhz setzen, und wie gesagt Anwendungen flashen.

Wenn jetzt der ext. Oszillator (Quarz) nicht schwingen würde, hätte ich mit diesen Fuse Einstellungen mit den AVR Studio keine Verbindung - ist für mich nicht logisch.

Es handelt sich um einen Atmega 328p-PU. Es soll auch dort Unterschiede geben.

Ich muss wissen ob es sich um ein Hardwareproblem handelt Quarz,Kerkos oder ob es an den Fuses liegt.

Mach mal eben ein neues Avr-gcc Project auf mit folgendem Code. Versuche das mal zu flaschen.

//#define F_CPU 16000000UL /* auskommentieren, falls der compiler meckert */
#include <avr/io.h>
#include <util/delay.h>

int main(void) {
	DDRB |= (1 << 5);
	while(1)
	{
		_delay_ms(500);
		PORTB ^= (1 << 5);
	}
	return 0;
}

Wie hast du SUT_CKSEL gesetzt. Zwischen Extended 0x05 und 0xfd macht er bei mir keinen Unterschied.

Wie hast du SUT_CKSEL gesetzt.

so..

Ext. Crystal Osc. 8.0-    MHz; Start-up time PWRDWN/RESET: 16K CK/14 CK + 65 ms

Dein code lässt sich flashen, eine Led an Port B pin 5 Blinkt leider nicht wie gewollt, bzw nach reset 3..4 mal.
Nicht in 500ms Abständen, denke etwas kürzer.
Schwingt etwa der Oszilator kurz an, und steht dann.

Also wird es wohl an meiner Kombi Quarz/Kerkos liegen

Das die Led beim Reset oder Upload kurz leuchtet ist etwas ärgerlich und liegt daran, dass dort der SPI Bus draufliegt. Hat somit noch nichts damit zu tun, ob der Takt richtig ist.

Wenn danach nichts kommt, liegt es am nicht anlaufenden Taktgeber.

"Also wird es wohl an meiner Kombi Quarz/Kerkos liegen" Denke mal die Kerkos machen hier die Probleme! Mach mal Bilder vom Aufbau und ggf. wo du die Kerkos her hast. Kann mir das morgen dann mal anschauen, heute nicht mehr.

Hast du jetzt einen 16 oder 8 MHz Quarz?

Arduinos werden manchmal mit 8 MHz betrieben, aber damit meint man i.d.R. den internen RC-Oszillator.

Hast du jetzt einen 16 oder 8 MHz Quarz?

Ein 16mhz Quarz.
Hier die Handy Bilder, aber so schlecht schaut die Platine in Natura nicht aus. :wink:

Auch mein erstes Layout mit Eagle, die Kerkos sitzen zu weit weg vom Quarz.
Wird aber nicht die Ursache sein.
Ich vermute eher das der Wert mit 56pF zu groß ist.