Hallo Werte Foren Mitglieder, Ich habe einen Atmega8 versehentlich alle Port c Pins auf Ausgang programmiert. Danach ging nichts mehr. Zum bedauern musste ich feststellen, der Reset Pin ist auf Port c. Habe ich mir damit den Chip zerschossen ? Als Programmer verwende ich STK500 und Software AtmelStudio 6.2. Muss ich den Chip in die Tonne hauen oder hab ich noch eine Chance ? Vielen Dank für Eure Hilfe.
soweit ich das weiss brauchst du einen HV Prommer um den zu "resetten" oder trotzdem noch programmieren zu können http://www.mikrocontroller.net/articles/AVR_HV-Programmer
Uwe Hohnstock schrieb: > Ich habe einen Atmega8 versehentlich alle Port c Pins auf Ausgang > programmiert. Wie? Solange du da nur das DDRC-Register verändert hast, passiert dem Reset-Pin gar nichts. Nur wenn du per RSTDISBL-Fuse den Reset-Pin zum IO umgewandelt hast, geht die Programmierung per ISP nicht mehr. Rückgängig machen lässt sich das nur per HV-Programierung, z.B. mit einem STK500. Oliver
Hallo Oliver, danke für Deine Antwort. Ich habe folgendes Programm auf den Atmega8 geschrieben. es ist eine Kopie (alle Rechte verbleiben bei dem Autor) Copy...
1 | ;****************************************************************************** |
2 | ;* |
3 | ;* Titel: LED Blinkprogramm |
4 | ;* Autor: Rüdiger Kluge |
5 | ;* Version: 01.01.0003 |
6 | ;* Build date: 22.12.08 |
7 | ;* Target: ATmega8 |
8 | ;* |
9 | ;* Zweck: |
10 | ;* Eine an PORTB, PB0 angeschlossene LED blinkt |
11 | ;* Die Periode des Blinkens kann mit den Variablen |
12 | ;* delay_0 |
13 | ;* delay_1 |
14 | ;* delay_2 |
15 | ;* eingestellt werden. |
16 | ;* |
17 | ;****************************************************************************** |
18 | |
19 | |
20 | ;****************************************************************************** |
21 | ;* Definitionen |
22 | ;****************************************************************************** |
23 | |
24 | ;.include "m8def.inc" ; Definitionen für ATmega8 |
25 | .def temp = r16 ; temp ist symbolischer Name für Register 16 |
26 | ; wird als temporäre Variable verwendet |
27 | .def delay_0 = r17 ; delay_0 ist symbolischer Name für Register 17 |
28 | .def delay_1 = r18 ; delay_1 ist symbolischer Name für Register 18 |
29 | .def delay_2 = r19 ; delay_2 ist symbolischer Name für Register 19 |
30 | .equ LED_0 = ~0b00000001 |
31 | ; Konstante für LED_0, ~0b00000001 = 0b11111110 |
32 | ; ~ bedeutet Bitwise Not |
33 | ; Die LED leuchtet, wenn der Ausgang PORTB = 0 ist |
34 | ; da die LED über einen Widerstand an V++ |
35 | ; geschaltet ist. |
36 | |
37 | ;****************************************************************************** |
38 | ;* Programm Start nach Reset |
39 | ;* |
40 | ;* der Stackpointer wird initialisiert |
41 | ;* RAMEND = $045F = 1119 beim ATmega8 |
42 | ;* Register werden gesetzt |
43 | ;****************************************************************************** |
44 | |
45 | RESET: ; hier startet der Code nach einem Reset |
46 | ldi r16,high(RAMEND) ; $04 wird in Register 16 geladen |
47 | out SPH,r16 ; SPH, oberes Byte des Stackpointers wird $04 |
48 | ldi r16,low(RAMEND) ; $5F wird in Register 16 geladen |
49 | out SPL,r16 ; SPL, unteres Byte des Stackpointers wird $5F |
50 | ser temp ; temp wird $FF = 255 (ser = Set Register) |
51 | out DDRB,temp ; setzt alle PINs von PORTB als Ausgang |
52 | ldi temp,LED_0 ; temp wird 0b11111110 |
53 | |
54 | |
55 | ;****************************************************************************** |
56 | ;* Hauptprogramm |
57 | ;* |
58 | ;* eine endlose Schleife |
59 | ;****************************************************************************** |
60 | |
61 | MAIN: ; hier startet das Hauptprogramm |
62 | ldi delay_0, 0 ; delay_0 wird 0 |
63 | ldi delay_1, 0 ; delay_1 wird 0 |
64 | ldi delay_2, 4 ; delay_1 wird 4, delay_1 > 0 wählen |
65 | out PORTC,temp ; PORTB, PIN0 wird gesetzt |
66 | com temp ; Einerkomplement bilden |
67 | ori temp,LED_0 ; temp wird temp ODER LED_0 |
68 | rcall SUB_DELAY ; Verzögerung, Sprung zu Unterprogramm |
69 | rjmp MAIN ; springt zurück zu MAIN: |
70 | |
71 | |
72 | ;******************************************************************************* |
73 | ;* Unterprogramm SUB_DELAY |
74 | ;* |
75 | ;* erzeugt eine Verzögerung für das Blinken |
76 | ;* |
77 | ;******************************************************************************* |
78 | |
79 | SUB_DELAY: ; hier ist der Einsprung ins Unterprogramm |
80 | |
81 | ; hier beginnt die innere Schleife |
82 | dec delay_0 ; delay_0 = delay_0 - 1 |
83 | brne SUB_DELAY ; wird ausgeführt, solange delay_0 nicht 0 ist |
84 | ; springt zu SUB_DELAY: |
85 | |
86 | ; hier beginnt die mittlere Schleife |
87 | dec delay_1 ; delay_1 = delay_1 - 1 |
88 | brne SUB_DELAY ; wird ausgeführt, solange delay_1 nicht 0 ist |
89 | ; springt zu SUB_DELAY: |
90 | |
91 | ; hier beginnt die äussere Schleife |
92 | dec delay_2 ; delay_2 = delay_2 - 1 |
93 | brne SUB_DELAY ; wird ausgeführt, solange delay_1 nicht 0 ist |
94 | ; springt zu SUB_DELAY: |
95 | |
96 | ret ; Sprung zurück ins Hauptprogramm zur |
97 | ; Instruktion nach |
98 | ; rcall SUB_DELAY, also rjmp |
Da meine LED an Port C angeschlossen sind, habe ich den Quellcode von b auf C geändert. Seit dem kann ich nicht mehr auf den Controller zugreifen. Ich hoffe Du hast eine Idee. Vielen Dank Uwe
Uwe Hohnstock schrieb: > Da meine LED an Port C angeschlossen sind, habe ich den Quellcode von b > auf C geändert. Ja, aber nur halb.
1 | out DDRB,temp ; setzt alle PINs von PORTB als Ausgang |
wenn du deine LEDs am Port C hast, dann musst du auch das DDRC benutzen, um die Pins auf Ausgang zu schalten. > Seit dem kann ich nicht mehr auf den Controller zugreifen. Kontrollier nochmal alles. Durch dieses Programm kannst du dir nichts wirklich zerstören. Und solange du nicht an den Fuse Bits gespielt hast, ist der µC auch kein Fall für die Tonne. So schnell gehen die nicht kaputt.
Am Einfachsten ist es doch wohl, den Mega8 direkt auf das STK500 zu setzen und mal die Signatur auszulesen. Solltest du den µC nicht aus der Schaltung nehmen können mußt du zumindest deine Connection vom Reset Pin entfernen und dann versuchen mit ihm "zu reden" ;-)
Hi, das werde ich mal versuchen, den RESET" Pin kann ich auftrennen. Doch wenn ich das mache, kann ich ihn dann noch auslesen ? Im Moment funzt das nicht (RESET angeschlossen). Eine feste Schaltung SMD. Werde es ausprobieren, erst mal Danke und ich sag bescheid. Gruß Uwe
Er meinte, dass du vom Reset Pin alles abmachen sollst - außer die Leitung zum Programmer.
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.