Hallo, ich steuere ein 4x20 LCD EA-W204B-NLW von Reichelt an. Die Initialisierung des LCD und die Ausgabe von Zeichen funktionieren tadellos, jedoch nur an Port D. Ich gebe die Steuersignale RW, RS, E,und die Datensignale DB4, DB5, DB6, DB7 (4-Bit Modus) über die binären Ausgänge PB0 und PD2 bis PD7 aus. Wenn ich jetzt aber statt PortD den PortA oder PortC einstelle, so funktioniert die Initialisierung nicht mehr. Einzig und allein an PortD scheint dies möglich zu sein?!? Ich habe meinen kompletten Code mal angehangen. Wichtig wäre nur die lcd.c, habe aber der Vollständigkeit halber mal alle Quelldateien angehangen. Ich verstehe es einfach nicht, da es sich doch nur um binäre Ausgänge handelt
PORTA ist tückisch, wenn man AVcc und AGND nicht oder nicht korrekt beschaltet. PORTC ist tückisch, wenn man die Werkseinstellung für JTAG (enabled) nicht ändert. Beides kann ich in deinem Schaltplan nicht erkennen :)
Helfer schrieb: > PORTC ist tückisch, wenn man die Werkseinstellung für JTAG (enabled) > nicht ändert. Würde es reichen die Fuses JTAGEN und SPIEN zu deaktivieren, um alle Pins an PortC als normale Pins ansprechbar zu machen?
>Würde es reichen die Fuses JTAGEN und SPIEN zu deaktivieren, um alle >Pins an PortC als normale Pins ansprechbar zu machen? JTAG reicht. SPIEN kannst du per ISP nicht löschen.
OK vielen dank für den Hinweis :) Ich werde es gleich morgen ausprobieren und berichten, ob ich erfolgreich war.
Hallo, ich bekomme es leider partout nicht hin die neuen Fuses zu brennen. Weder mit dem MYAVR Progtool noch mit AVRDude bekomme ich dies hin. Es erscheint jedesmal eine Fehlermeldung. LFUSE= FD HFUSE= 99 >> soll geändert werden auf D9, damit JTAGEN deaktiviert werden kann Weiß jemand Rat?
Mit Fuses hab ich es noch nicht so :) Aber damit Dir vielleicht jemand anders helfen kann: Welche Fehlermeldung gibt es? 42m
1 | trying to connect to device... |
2 | |
3 | Found programmer: Id = "AVR ISP"; type = S |
4 | Software Version = 3.0; Hardware Version = 3.0 |
5 | Programmer supports auto addr increment. |
6 | Programmer supports buffered memory access with buffersize = 128 bytes. |
7 | |
8 | Programmer supports the following devices: |
9 | Device code: 0x01 = (unknown) |
10 | Device code: 0x02 = (unknown) |
11 | Device code: 0x03 = (unknown) |
12 | Device code: 0x04 = (unknown) |
13 | Device code: 0x05 = (unknown) |
14 | Device code: 0x06 = (unknown) |
15 | Device code: 0x07 = (unknown) |
16 | Device code: 0x08 = (unknown) |
17 | Device code: 0x09 = (unknown) |
18 | Device code: 0x0a = (unknown) |
19 | Device code: 0x0b = (unknown) |
20 | Device code: 0x0c = (unknown) |
21 | Device code: 0x0d = (unknown) |
22 | Device code: 0x0e = (unknown) |
23 | Device code: 0x0f = (unknown) |
24 | Device code: 0x10 = (unknown) |
25 | Device code: 0x11 = (unknown) |
26 | Device code: 0x12 = (unknown) |
27 | Device code: 0x13 = AT90S1200 |
28 | Device code: 0x14 = (unknown) |
29 | Device code: 0x15 = (unknown) |
30 | Device code: 0x16 = (unknown) |
31 | Device code: 0x17 = (unknown) |
32 | Device code: 0x18 = (unknown) |
33 | Device code: 0x19 = (unknown) |
34 | Device code: 0x1a = (unknown) |
35 | Device code: 0x1b = (unknown) |
36 | Device code: 0x1c = (unknown) |
37 | Device code: 0x1d = (unknown) |
38 | Device code: 0x1e = (unknown) |
39 | Device code: 0x1f = (unknown) |
40 | Device code: 0x20 = ATtiny84 |
41 | Device code: 0x21 = (unknown) |
42 | Device code: 0x22 = (unknown) |
43 | Device code: 0x23 = (unknown) |
44 | Device code: 0x24 = (unknown) |
45 | Device code: 0x25 = (unknown) |
46 | Device code: 0x26 = (unknown) |
47 | Device code: 0x27 = (unknown) |
48 | Device code: 0x28 = AT90S4414 |
49 | Device code: 0x29 = (unknown) |
50 | Device code: 0x2a = (unknown) |
51 | Device code: 0x2b = (unknown) |
52 | Device code: 0x2c = (unknown) |
53 | Device code: 0x2d = (unknown) |
54 | Device code: 0x2e = (unknown) |
55 | Device code: 0x2f = (unknown) |
56 | Device code: 0x30 = AT90S4433 |
57 | Device code: 0x31 = (unknown) |
58 | Device code: 0x32 = (unknown) |
59 | Device code: 0x33 = (unknown) |
60 | Device code: 0x34 = AT90S2333 |
61 | Device code: 0x35 = (unknown) |
62 | Device code: 0x36 = (unknown) |
63 | Device code: 0x37 = (unknown) |
64 | Device code: 0x38 = AT90S8515 |
65 | Device code: 0x39 = (unknown) |
66 | Device code: 0x3a = ATMEGA8515 |
67 | Device code: 0x3b = (unknown) |
68 | Device code: 0x3c = (unknown) |
69 | Device code: 0x3d = (unknown) |
70 | Device code: 0x3e = (unknown) |
71 | Device code: 0x3f = (unknown) |
72 | Device code: 0x40 = (unknown) |
73 | Device code: 0x41 = ATMEGA103 |
74 | Device code: 0x42 = (unknown) |
75 | Device code: 0x43 = ATMEGA128 |
76 | Device code: 0x44 = (unknown) |
77 | Device code: 0x45 = ATMEGA64 |
78 | Device code: 0x46 = (unknown) |
79 | Device code: 0x47 = (unknown) |
80 | Device code: 0x48 = (unknown) |
81 | Device code: 0x49 = (unknown) |
82 | Device code: 0x4a = (unknown) |
83 | Device code: 0x4b = (unknown) |
84 | Device code: 0x4c = AT90S2343 |
85 | Device code: 0x4d = (unknown) |
86 | Device code: 0x4e = (unknown) |
87 | Device code: 0x4f = (unknown) |
88 | Device code: 0x50 = (unknown) |
89 | Device code: 0x51 = (unknown) |
90 | Device code: 0x52 = (unknown) |
91 | Device code: 0x53 = (unknown) |
92 | Device code: 0x54 = (unknown) |
93 | Device code: 0x55 = ATtiny12 |
94 | Device code: 0x56 = ATtiny15 |
95 | Device code: 0x57 = (unknown) |
96 | Device code: 0x58 = (unknown) |
97 | Device code: 0x59 = (unknown) |
98 | Device code: 0x5a = (unknown) |
99 | Device code: 0x5b = (unknown) |
100 | Device code: 0x5c = (unknown) |
101 | Device code: 0x5d = (unknown) |
102 | Device code: 0x5e = ATtiny2313 |
103 | Device code: 0x5f = (unknown) |
104 | Device code: 0x60 = ATMEGA161 |
105 | Device code: 0x61 = (unknown) |
106 | Device code: 0x62 = (unknown) |
107 | Device code: 0x63 = ATMEGA162 |
108 | Device code: 0x64 = ATMEGA163 |
109 | Device code: 0x65 = (unknown) |
110 | Device code: 0x66 = (unknown) |
111 | Device code: 0x67 = (unknown) |
112 | Device code: 0x68 = AT90S8535 |
113 | Device code: 0x69 = ATMEGA8535 |
114 | Device code: 0x6a = (unknown) |
115 | Device code: 0x6b = (unknown) |
116 | Device code: 0x6c = AT90S4434 |
117 | Device code: 0x6d = (unknown) |
118 | Device code: 0x6e = (unknown) |
119 | Device code: 0x6f = (unknown) |
120 | Device code: 0x70 = (unknown) |
121 | Device code: 0x71 = (unknown) |
122 | Device code: 0x72 = ATMEGA32 |
123 | Device code: 0x73 = (unknown) |
124 | Device code: 0x74 = ATMEGA6450 |
125 | Device code: 0x75 = ATMEGA6490 |
126 | Device code: 0x76 = ATMEGA8 |
127 | Device code: 0x77 = (unknown) |
128 | Device code: 0x78 = ATMEGA169 |
129 | Device code: 0x79 = (unknown) |
130 | Device code: 0x7a = (unknown) |
131 | Device code: 0x7b = (unknown) |
132 | Device code: 0x7c = (unknown) |
133 | Device code: 0x7d = (unknown) |
134 | Device code: 0x7e = (unknown) |
135 | Device code: 0x7f = (unknown) |
136 | |
137 | avrdude: AVR device initialized and ready to accept instructions |
138 | |
139 | Reading | ################################################## | 100% 0.02s |
140 | |
141 | avrdude: Device signature = 0x1e960a |
142 | avrdude: current erase-rewrite cycle count is 1061109567 (if being tracked) |
143 | avrdude: reading input file "0xD9" |
144 | avrdude: writing hfuse (1 bytes): |
145 | |
146 | Writing | | 0% 0.00s ***faile |
147 | d; |
148 | Writing | ################################################## | 100% 120.03s |
149 | |
150 | avrdude: 1 bytes of hfuse written |
151 | avrdude: verifying hfuse memory against 0xD9: |
152 | avrdude: load data hfuse data from input file 0xD9: |
153 | avrdude: input file 0xD9 contains 1 bytes |
154 | avrdude: reading on-chip hfuse data: |
155 | |
156 | Reading | ################################################## | 100% 15.01s |
157 | |
158 | avrdude: verifying ... |
159 | avrdude: verification error, first mismatch at byte 0x0000 |
160 | 0xd9 != 0x2e |
161 | avrdude: verification error; content mismatch |
162 | |
163 | avrdude done. Thank you. |
Mit welcher Kommandpzeile hast du AVRDUDE gefüttert?
Wie folgt:
1 | @echo off |
2 | color f0 |
3 | title AvrDude GUI Command Window |
4 | @echo. |
5 | @echo. trying to connect to device... |
6 | avrdude -p ATMEGA644P -c avr910 -P COM1 -u -U hfuse:w:"0xD9":m |
7 | avrdudeGUI.exe -done |
8 | pause |
Ich verwendet AVRDUDE 5.10 und möchte das JTAGEN deaktivieren, sodass ich PORTC als normalen I/O-Port nutzen kann.
Was mich ein bisschen wundert ist > Programmer supports the following devices: > Device code: 0x01 = (unknown) Wieso sollte avrdude diese Liste anzeigen (und dann noch mit so vielen Unbekannten), wenn man ihm den richtigen Programmer mit auf den Weg gibt? Welche Version von avrdude verwendest Du? So eine seltsame Auflistung habe ich bisher nicht gesehen. [EDIT: Hab gesehen, Du hast meine Frage in vorauseilendem Gehorsam bereits beantwortet :)] 42m
Jan Peukert schrieb: > avrdude -p ATMEGA644P -c avr910 -P COM1 -u -U hfuse:w:"0xD9":m und > Found programmer: Id = "AVR ISP"; type = S Ich kenne den avr910 zwar nicht, aber ein AVR ISP ist es wohl nicht :) 42m
Ja auch wenn ich dort avr910 oder avr911 eintrage, es ändert sich nicht. Verwende den "mySmart USB light" ISP-Programmer. Dieser ist avr910/911 kompatibel
Jetzt muss ich meinen eigenen Blödsinn doch noch kommentieren ... Da habe ich nicht richtig gelesen, WAS da in der Liste überhaupt angezeigt wird sondern einfach unterstellt, avrdude würde die Liste der verwendbaren Programmer anzeigen. Ist natürlich Lötzinn. Ich schäme mich jetzt erst mal ne Runde :) 42m
Hier nochmal ne kurze Info zu meinem USB-Programmer: http://shop.myavr.de/Programmer/mySmartUSB%20light.htm?sp=article.sp.php&artID=200006 - Standard-USB-Controller (SiLabs CP2102) geeignet für WindowsXP- WindowsVISTA- Windows7, Linux, MacOSX - STK500v2 oder AVR910/911 Protokoll - reiner ISP-Programmer für Atmel AVR-Mikrocontroller im USB-Stick-Design - ausgeliefert wird der Programmer mit der Firmware STK500 V2 - als Alternative kann man sich auch die Firmware AVR911 910 109 drauf spielen Ich muss dazu sagen, dass wenn ich STK500V2 auswähle im AVRDUDE ich einen timeout bekomme
Ich nehme an, Du hast die alternative Firmware dann auch drauf, sonst dürfte es mit avr910 gar nicht gehen, oder? Ich spreche meine USB-Programmer ja per "-P usb" an. Hat es einen Grund, daß Du über COM1 gehst? 42m
Die Kommandozeile ist IMHO richtig. Das sieht nach einem spezifischen mySmartUSB Light Problem aus und ich würde auch mal den myAVR Support bemühen.
Hi, habe jetzt die Firmware STK500 v1 auf meinen ISP-Programmer geflasht und nun kann ich auch aus AVRStudio die Fuse-Bits setzen. Das JTAG ist nun deaktiviert und im Programmcode setze ich zu Beginn der Mainfunktion das JTD-Bit im Register MCUCR auf 1, um JTAG damit zu deaktivieren (laut Datenblatt). main.c
1 | // definitions |
2 | // ################################################################# |
3 | // define cpu clock frequency if not already done |
4 | /* |
5 | #if (MCU == atmega8) |
6 | #ifndef F_CPU |
7 | #warning "F_CPU was not defined, now defining as 3.686.400Hz" |
8 | #define F_CPU 3686400UL // crystal at 3.6864 Mhz |
9 | #endif // F_CPU |
10 | #else // (MCU == atmega644p) |
11 | #ifndef F_CPU |
12 | #warning "F_CPU was not defined, now defining as 7.372.800Hz" |
13 | #define F_CPU 7372800UL // crystal at 7.3728 Mhz |
14 | #endif // F_CPU |
15 | #endif |
16 | */ |
17 | #ifndef F_CPU |
18 | #warning "F_CPU was not defined, now defining as 3.686.400Hz" |
19 | #define F_CPU 3686400UL // crystal at 3.6864 Mhz |
20 | #endif // F_CPU |
21 | // ################################################################# |
22 | |
23 | |
24 | // include header files |
25 | #include "avr/io.h" |
26 | #include "lcd.h" |
27 | #include "functions.h" |
28 | |
29 | // definitions |
30 | |
31 | // define selection of MPU |
32 | //#define ATMEGA8 |
33 | #define ATMEGA644P |
34 | |
35 | |
36 | // ######################### MAIN-FUNCTION ######################### |
37 | int main(void) |
38 | { |
39 | |
40 | // variables & parameters |
41 | |
42 | // program-code |
43 | |
44 | // deactivate JTAG-pins on PORTC (must be done twice within 4 cycles) |
45 | #ifdef ATMEGA644P |
46 | MCUCR |= (1 << JTD); |
47 | MCUCR |= (1 << JTD); |
48 | #endif |
49 | |
50 | // initialize lcd |
51 | wait_ms(500); |
52 | lcd_init(); |
53 | |
54 | // main-loop |
55 | while (1) |
56 | { |
57 | |
58 | |
59 | lcd_clear(); |
60 | //write_all_addresses(); |
61 | lcd_place_cursor(1,1); |
62 | lcd_write_string("!Das ist Zeile 1"); |
63 | lcd_place_cursor(2,1); |
64 | lcd_write_string("!Das ist Zeile 2"); |
65 | lcd_place_cursor(3,1); |
66 | lcd_write_string("!Das ist Zeile 3"); |
67 | lcd_place_cursor(4,1); |
68 | lcd_write_string("!Das ist Zeile 4"); |
69 | wait_ms(20); |
70 | } |
71 | |
72 | // this part will never be reached during normal program sequence |
73 | return 0; |
74 | } |
75 | // ################################################################# |
Allerdings funktioniert die Initialisierung und Ausgabe der Zeichen auf PortC immernoch nicht :(
Mein Problem ist gelöst. Habe das Display noch einmal neu auf dem Steckboard verdrahtet. Da muss sich wohl an einer Stelle ein Fehler eingeschlichen haben. Danke an alle, die mir geholfen haben. Ihr seid die Besten :)
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.