USBasp-Klon: Unterschied zwischen den Versionen

Aus Wiki CCC Göttingen
Wechseln zu: Navigation, Suche
K (Änderungen von 67.228.169.155 (Diskussion) rückgängig gemacht und letzte Version von 216.129.53.212 wiederhergestellt)
(Engische Kategorie hinzugefügt)
 
(11 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
comment4, http://thedudesnews.com tetracycline, http://nordmusik.com zithromax maoi zanax, http://owenwisterreview.com 500mg cipro, http://thestarterwifemonologues.com plavix, http://confidenceclimbing.com bethin, http://troublefreeautomotive.com seroquel pancreatitis, http://cherrymakes.com viagra.com, http://ezymeal.com order retin-a, http://auguzto.org cialis, http://ryanleemusic.com elimite and pregnacy,
+
Hier wird ein Board fuer den USBasp [http://www.fischl.de/usbasp/], ein AVR In System Programmer, der V-USB fuer USB direkt am AVR verwendet.
 +
 
 +
''Achtung:'' Das Board ist aus Platzgruenden nicht mit der Originalfirmware kompatibel! Nur die gepatchte Firmware aufspielen!
 +
 
 +
==Board==
 +
Das Board ist in platzsparender Stickform und verwendet beinahe nur SMD-Komponenten in handbestueckbaren Grössen.
 +
 
 +
* Bild: http://www.0x53a.de/files/usbasp-II.png
 +
* CAD-Quellen (gEDA pcb): http://www.0x53a.de/files/usbasp-II.pcb
 +
===Bestückung===
 +
Da die meisten Bauteile nichts besonderes sind, aber doch immermal was fehlt, habe ich noch zu jedem Bauteil, das nicht unbedingt funktionskritisch ist, noch eine Alternativbestückung dazugeschrieben. Die Bauteile haben natürlich einen Sinn und ein Fehlen schränkt in der einen oder anderen Weise die Funktionalität des Programmers ein.
 +
{| border="1"
 +
! Bezeichner
 +
! Bestückung
 +
! Alternativbestückung
 +
|-
 +
| L1
 +
| Spule 1210: 10uH, 100 mA
 +
| Widerstand, 1206: 0 Ohm
 +
|-
 +
| C1
 +
| Kondensator, 0805: 10uF, 16 V
 +
| freilassen
 +
|-
 +
| B0, B1, B2, B3, B4, B5
 +
| Widerstand, 1206: 0 Ohm
 +
| -
 +
|-
 +
| D1, D2
 +
| Zener-Diode, MiniMELF: 3.6V Zener-Spannung
 +
| -
 +
|-
 +
| R1, R2
 +
| Widerstand, 0805: 68 Ohm
 +
| -
 +
|-
 +
| R3
 +
| Widerstand, 0805: 2.2 kOhm
 +
| Widerstand mit ähnlichem Wert
 +
|-
 +
| C2, C3, C4
 +
| Keramikkondensator 0603: 100nF, 16V
 +
| Keramikkondensator mit ähnlichem Wert
 +
|-
 +
| C6, C7
 +
| Keramikkondensator 0603: 22pF, 16V
 +
| -
 +
|-
 +
| Y1
 +
| Quarz, HC49 SMD: 12MHz
 +
| -
 +
|-
 +
| U1
 +
| ATmega8, TQFP
 +
| ATmega48, TQFP oder ähnlich
 +
|-
 +
| R4, R5
 +
| Widerstand, 0805: 1kOhm
 +
| Widerstand mit ähnlichem Wert
 +
|-
 +
| LD1, LD2
 +
| Leuchtdiode 0805
 +
| freilassen
 +
|-
 +
| T1, T2
 +
| Taster
 +
| freilassen
 +
|-
 +
| (unbenannt)
 +
| 10-poliger Wannenstecker
 +
| freilassen
 +
|-
 +
| (unbenannt)
 +
| 6-poliger Wannnenstecker
 +
| freilassen
 +
|}
 +
 
 +
==Firmware==
 +
Der Programmer selbst muss einmal geflasht werden, bevor er verwendet werden kann, wofür ein bereits funktionierender AVR ISP benötigt wird.
 +
===Patch===
 +
--- main.c.old 2010-09-26 12:17:50.460872001 +0200
 +
+++ main.c 2010-09-26 18:03:05.670872002 +0200
 +
@@ -222,7 +222,11 @@
 +
  PORTD = 0;
 +
  PORTB = 0;
 +
  /* all outputs except PD2 = INT0 */
 +
- DDRD = ~(1 << 2);
 +
+ //DDRD = ~(1 << 2);
 +
+ /* switch PD0, PD3, PD4 and PD5 to input, as they are used
 +
+ * routing and PD2 to input as it is used for INT0
 +
+ */
 +
+ DDRD &= ~((1 << 0) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5));
 +
 
 +
  /* output SE0 for USB reset */
 +
  DDRB = ~0;
 +
@@ -238,8 +242,10 @@
 +
  DDRB = 0;
 +
 
 +
  /* all inputs except PC0, PC1 */
 +
- DDRC = 0x03;
 +
- PORTC = 0xfe;
 +
+ DDRC = (1 << 0) | (1 << 1);
 +
+ /* activate pullups on all other pins, except those that were
 +
+ * re-used for routing */
 +
+ PORTC = ~((1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5));
 +
 
 +
  /* init timer */
 +
  clockInit();
 +
 
 +
 
 +
 
 +
__FORCETOC__
 +
[[Category:Projekte]][[Category:Bausaetze]][[Category:en]]

Aktuelle Version vom 11. November 2011, 14:19 Uhr

Hier wird ein Board fuer den USBasp [1], ein AVR In System Programmer, der V-USB fuer USB direkt am AVR verwendet.

Achtung: Das Board ist aus Platzgruenden nicht mit der Originalfirmware kompatibel! Nur die gepatchte Firmware aufspielen!

Board

Das Board ist in platzsparender Stickform und verwendet beinahe nur SMD-Komponenten in handbestueckbaren Grössen.

Bestückung

Da die meisten Bauteile nichts besonderes sind, aber doch immermal was fehlt, habe ich noch zu jedem Bauteil, das nicht unbedingt funktionskritisch ist, noch eine Alternativbestückung dazugeschrieben. Die Bauteile haben natürlich einen Sinn und ein Fehlen schränkt in der einen oder anderen Weise die Funktionalität des Programmers ein.

Bezeichner Bestückung Alternativbestückung
L1 Spule 1210: 10uH, 100 mA Widerstand, 1206: 0 Ohm
C1 Kondensator, 0805: 10uF, 16 V freilassen
B0, B1, B2, B3, B4, B5 Widerstand, 1206: 0 Ohm -
D1, D2 Zener-Diode, MiniMELF: 3.6V Zener-Spannung -
R1, R2 Widerstand, 0805: 68 Ohm -
R3 Widerstand, 0805: 2.2 kOhm Widerstand mit ähnlichem Wert
C2, C3, C4 Keramikkondensator 0603: 100nF, 16V Keramikkondensator mit ähnlichem Wert
C6, C7 Keramikkondensator 0603: 22pF, 16V -
Y1 Quarz, HC49 SMD: 12MHz -
U1 ATmega8, TQFP ATmega48, TQFP oder ähnlich
R4, R5 Widerstand, 0805: 1kOhm Widerstand mit ähnlichem Wert
LD1, LD2 Leuchtdiode 0805 freilassen
T1, T2 Taster freilassen
(unbenannt) 10-poliger Wannenstecker freilassen
(unbenannt) 6-poliger Wannnenstecker freilassen

Firmware

Der Programmer selbst muss einmal geflasht werden, bevor er verwendet werden kann, wofür ein bereits funktionierender AVR ISP benötigt wird.

Patch

--- main.c.old	2010-09-26 12:17:50.460872001 +0200
+++ main.c	2010-09-26 18:03:05.670872002 +0200
@@ -222,7 +222,11 @@
 	PORTD = 0;
 	PORTB = 0;
 	/* all outputs except PD2 = INT0 */
-	DDRD = ~(1 << 2);
+	//DDRD = ~(1 << 2);
+	/* switch PD0, PD3, PD4 and PD5 to input, as they are used
+	 * routing and PD2 to input as it is used for INT0
+	 */
+	DDRD &= ~((1 << 0) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5));
 
 	/* output SE0 for USB reset */
 	DDRB = ~0;
@@ -238,8 +242,10 @@
 	DDRB = 0;
 
 	/* all inputs except PC0, PC1 */
-	DDRC = 0x03;
-	PORTC = 0xfe;
+	DDRC = (1 << 0) | (1 << 1);
+	/* activate pullups on all other pins, except those that were 
+	 * re-used for routing */
+	PORTC = ~((1 << 0) | (1 << 1) | (1 << 3) | (1 << 4) | (1 << 5));
 
 	/* init timer */
 	clockInit();