Forum: Mikrocontroller und Digitale Elektronik Nur das Schreiben des Flashs klappt nicht(Atmega32 mit usbasp)


von Pascal J. (kallito)


Angehängte Dateien:

Lesenswert?

Hi,

bin ein Neuling im µc Bereich. Hab mir einen atmega32 gekauft und ihn 
wie auf 
http://rn-wissen.de/images/6/65/Avrtutorial_grundschaltung_max232.gif 
mit einem 16MhzQuarz aufgebaut.
Um den zu Programmieren hab ich mir usbasp gekauft. 
(von:https://www.ssl-id.de/b-redemann.de/catalog/product_info.php?cPath=44&products_id=32&osCsid=5r4sutvj235cu7oecb2kun9bk3)
Problem ist jetz allerdings, dass ich nichts in den flash schreiben 
kann. Auslesen Klappt wunderbar.Auch das schrieben der fusebits und 
schreiben des eeproms klappt
So nebenbei:
Der ISP stecker ist nicht falschrum, bei usbasp ist nur der JP für 
slowsck gesetzt.Auch wenn der nicht gestzt ist klappt es nicht, kein 
unterschied. Beim Programmieren bzw auslesen leuchten beide LEDs vom 
usbasp.
Getestet hab ich folgendes:

D:\Users\Public\Documents\µc\avrdude-5.5\avrdude-5.5-win32-bin>avrdude.e 
xe  -c us
basp -p m32 -t
found 7 busses

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.03s

avrdude.exe: Device signature = 0x1e9502
avrdude> read flash 0 50
>>> read flash 0 50
0000  a0 29 72 06 00 00 00 00  00 00 80 01 17 4b 7b 00 
|á)r..........K{.|
0010  60 9a 10 03 f8 fa 12 00  e6 3e 7b 00 80 01 00 00 
|`Ü..°....>{.....|
0020  80 00 00 00 10 b2 40 04  4c fb 12 00 a5 c6 7c 00 
|.....▓@.L...Ñã|.|
0030  80 01                                             |.. 
|

avrdude> write flash 0 0x45 0x45 0x45
>>> write flash 0 0x45 0x45 0x45
avrdude.exe (write): error writing 0x45 at 0x00000 cell=0xa0
avrdude.exe (write): error writing 0x45 at 0x00001 cell=0x29
avrdude.exe (write): error writing 0x45 at 0x00002 cell=0x72

avrdude> read hfuse 0 1
>>> read hfuse 0 1
0000  d9                                                |. 
|

avrdude> read lfuse 0 1
>>> read lfuse 0 1
0000  0f                                                |. 
|

avrdude> part
>>> part

AVR Part                      : ATMEGA32
Chip Erase delay              : 9000 us
PAGEL                         : PD7
BS2                           : PA0
RESET disposition             : dedicated
RETRY pulse                   : SCK
serial program mode           : yes
parallel program mode         : yes
Timeout                       : 200
StabDelay                     : 100
CmdexeDelay                   : 25
SyncLoops                     : 32
ByteDelay                     : 0
PollIndex                     : 3
PollValue                     : 0x53
Memory Detail                 :

                         Block Poll               Page 
Pol
led
  Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW 
ReadB
ack
  ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- 
----- ------
---
  eeprom         4    10    64    0 no       1024    4      0  9000 
9000 0xff 0
xff
  flash         33     6    64    0 yes     32768  128    256  4500 
4500 0xff 0
xff
  lfuse          0     0     0    0 no          1    0      0  2000 
2000 0x00 0
x00
  hfuse          0     0     0    0 no          1    0      0  2000 
2000 0x00 0
x00
  lock           0     0     0    0 no          1    0      0  2000 
2000 0x00 0
x00
  signature      0     0     0    0 no          3    0      0     0 
0 0x00 0
x00
  calibration    0     0     0    0 no          4    0      0     0 
0 0x00 0
x00

avrdude> read eeprom 0 5
>>> read eeprom 0 5
0000  ff ff ff ff ff                                    |..... 
|

avrdude> write eeprom 0 0x48 0x61 0x6C 0x6C 0x6F
>>> write eeprom 0 0x48 0x61 0x6C 0x6C 0x6F

avrdude> read eeprom 0 5
>>> read eeprom 0 5
0000  48 61 6c 6c 6f                                    |Hallo 
|

avrdude>


Woran kann das liegen? Fehler beim Löten? µc defekt? Bin für jeden Tipp 
dankbar.

von Michael U. (amiga)


Lesenswert?

Hallo,

gelöscht hast Du den Flash aber vor dem programmieren?

Gruß aus Berlin
Michael

von Pascal J. (kallito)


Lesenswert?

Du meinst mit "erase" ? Das geht auch nit? Muss man das immer vor dem 
schreiben machen?

avrdude> erase
>>> erase
avrdude.exe: erasing chip
avrdude> read flash 0 50
>>> read flash 0 50
0000  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff 
|................|
0010  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff 
|................|
0020  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff 
|................|
0030  ff ff                                             |.. 
|

avrdude> write flash 0 0x48 0x61 0x6C 0x6C 0x6F
>>> write flash 0 0x48 0x61 0x6C 0x6C 0x6F
avrdude.exe (write): error writing 0x48 at 0x00000 cell=0xff
avrdude.exe (write): error writing 0x61 at 0x00001 cell=0xff
avrdude.exe (write): error writing 0x6c at 0x00002 cell=0xff
avrdude.exe (write): error writing 0x6c at 0x00003 cell=0xff
avrdude.exe (write): error writing 0x6f at 0x00004 cell=0xff

avrdude>

von Michael U. (amiga)


Lesenswert?

Hallo,

ich benutze AVRDude nicht und habe den Flash auch noch nie sozusagen zu 
Fuß beschrieben, keine Ahnung, ob das geht, würde mich wundern.

Löschen mußt Du vorher, es kann nur eine 1 auf 0 programmiert werden.

Gruß aus Berlin
Michael

von Pascal J. (kallito)


Lesenswert?

hab einfach mal mit Bascom
1
 $regfile = "m32def.dat"
2
 $framesize = 32
3
 $swstack = 32
4
 $hwstack = 32
5
 $crystal = 16000000
6
 $baud = 9600
7
 Config Portc.0 = Output                                    'Ein Pin wird als Ausgang konfiguriert PC0 (also Pin0 von Port C)
8
  Portc.0 = 1
9
  Do
10
    Print "**** RN-CONTROL sagt Hello World *****"
11
    Wait 1
12
  Loop
compiliert und es versucht mit bascom zu übertragen.(Auslesen und 
erkennen geht)Beim programmieren, wenn ich Autoprogramming auswähle, 
geht das Fenster sofort wieder weg. Wenn ich es manuell mache bekomm ich 
den Fehler:

Chip differs at byte address : 00000
Buffer read
384 bytes written to FLASH
CHIP is empty
Buffer read
CHIP erased
USBASP programmer set

Wenn ich das ganze als .hex mit avrdude hochladen bekomme ich keinen 
Fehler:
1
D:\Users\Public\Documents\µc\avrdude-5.5\avrdude-5.5-win32-bin>avrdude.exe -c u
2
basp -p m32 -U justprint.hex
3
found 7 busses
4
5
avrdude.exe: AVR device initialized and ready to accept instructions
6
7
Reading | ################################################## | 100% 0.03s
8
9
avrdude.exe: Device signature = 0x1e9502
10
avrdude.exe: NOTE: FLASH memory has been specified, an erase cycle will be perf
11
rmed
12
             To disable this feature, specify the -D option.
13
avrdude.exe: erasing chip
14
avrdude.exe: reading input file "justprint.hex"
15
avrdude.exe: input file justprint.hex auto detected as Intel Hex
16
avrdude.exe: writing flash (316 bytes):
17
18
Writing | ################################################## | 100% 1.52s
19
20
21
22
avrdude.exe: 316 bytes of flash written
23
avrdude.exe: verifying flash memory against justprint.hex:
24
avrdude.exe: load data flash data from input file justprint.hex:
25
avrdude.exe: input file justprint.hex auto detected as Intel Hex
26
avrdude.exe: input file justprint.hex contains 316 bytes
27
avrdude.exe: reading on-chip flash data:
28
29
Reading | ################################################## | 100% 1.39s
30
31
32
33
avrdude.exe: verifying ...
34
avrdude.exe: 316 bytes of flash verified
35
36
avrdude.exe: safemode: Fuses OK
37
38
avrdude.exe done.  Thank you.
allerdings wenn ich es dann auslese steht was falsches drin in Z:~0x130 
sollte etwas von "Hello World" stehen.
1
avrdude> read flash 0x120 0xF0
2
>>> read flash 0x120 0xF0
3
0120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
4
0130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
5
0140  f0 17 3a 04 b8 fb 12 00  e4 80 5b 00 01 9e 57 00  |­.:.©...õ.[..×W.|
6
0150  80 80 5b 00 c0 fb 12 00  8a 80 5b 00 b8 fb 12 00  |..[.└.....[.©...|
7
0160  00 00 00 00 40 80 5b 00  01 9e 57 00 70 6a 09 03  |....@.[..×W.pj .|
8
0170  fc fb 12 00 a1 c2 5b 00  cc fb 12 00 c8 c2 5b 00  |³...í┬[.╠...╚┬[.|
9
0180  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
10
0190  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
11
01a0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
12
01b0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
13
01c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
14
01d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
15
01e0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
16
01f0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
17
0200  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
Wo liegt mein Fehler?

von Pascal J. (kallito)


Lesenswert?

Letztendlicht klappt es, danke für die Hilfe.

Wenn wer das selbe Problem hat:
Das hochladen als hex klappt, das "manuelle" Programmieren mit avrdude 
nicht.
Der punkt Programmer=USBASP in Bascom funktioniert nicht mit meinem 
USBasp
(so muss es gemacht werden-> Beitrag "AVRdude als externen Programmer in BASCOM einbinden")
Alle Leiterbahnen zwischen ISP und µc nochmal nachgehen(weis nit ob es 
bei mir dadran gelegen hat).
Kabel zwischen USBasp und der Buchse vom µc austauschen.
Eizelne datei übertragen macht man mit
1
avrdude.exe -c usbasp -p m32 -U dateinameisthier.hex

Vielen Dank

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
Noch kein Account? Hier anmelden.