Ich habe den yC getauscht von Atmega32 auf Atmega324P
und nun habe ich da ein kleines problem.
INT0 ist nun auch durch RXD1 belegt, und er zeigt beim Compilen den
Fehler:
../main.c:150: error: 'GICR' undeclared (first use in this function)
// Interrupt
MCUCR = 0x02; // falling slope
GICR |= (1<<INT0);
// ADC
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); //
prescaler 256
ADMUX = (1<<REFS1) | (1<REFS0) |(1<<MUX2) | (1<<MUX1) | (1<<MUX0); //
internal 2,56V reference ADC7
Allerlei Register und Bits heissen anders und wahrscheinlich sieht die
Steuerung der externen Interrupts ein bischen anders aus. Es müsste von
Atmel eine AN zu der Migration geben.
Einen Konflikt zwischen INT0 und der zweiten UART kann es bei Portierung
einer bestehenden Lösung nicht geben, denn in der wird die zweite UART
naturgemäss nicht verwendet.
>oooh man, son rotz da is ne ganze Menge anders selbst das SIGNAL() fuer>UART ist ein anderes
Dass die beiden bis auf den Familiennamen nicht viel gemeinsam haben,
hast du inzwischen festgestellt?
Der ATmega324 dürfte der große Bruder des ATMega162 sein, und der hat
auch nicht sooo viel mit dem Mega32 gemeinsam.
STK500-Besitzer schrieb:
> Der ATmega324 dürfte der große Bruder des ATMega162 sein, und der hat> auch nicht sooo viel mit dem Mega32 gemeinsam.
Gut multipliziert aber schlecht geraten. Der 324 ist der kleine Bruder
des 644, und der ist mit dem 32 verwandt. Nur ist eben ziemlich viel
umbenannt worden.
Manchmal fragt man sich mit welcher Dokumentation die Leute überhaupt
programmiert haben, wenn die nicht mal wissen, wo man ISR Handlernamen
herbekommt ;)
Simon schrieb:
> USART und DOGM-LCD funzt denoch nicht.
Glaskugel ist leider in der Reparatur -- also dann sag doch mal,
was nicht funktioniert.
> //asynchronous 8N1> UCSRC = (1 << URSEL) | (3 << UCSZ0);
Das kann man sich übrigens klemmen, 8N1 ist immer der Default
bei allen AVRs.
> UCSR0C = (1<<USBS0)|(3<<UCSZ00);
...und dann hast du es noch flacsh portiert, hier ist nämlich ein
8N2 draus geworden.
ich kann via rs232 an den yC zeichen schicken und er antwortet drauf,
zwei mal. danach muss ich erstmal die spannung abschalten und wieder ein
schalten um nochmal senden zu koennen.
ich habs, der code ist CKDIV8 Fuse abgeschalten.
und es funzt bestens, allerdings haette ich noch ne kleine Frage:
Wieso wirkt CKDIV8 obwohl ich nicht den internen oscillator verwende?
Simon schrieb:
> Wieso wirkt CKDIV8 obwohl ich nicht den internen oscillator verwende?
Weil sie die Voreinstellung des clock prescalers (CLKPR) von 1:1
auf 1:8 ändert. Die neuen AVRs haben nur noch einen einzigen
RC-Oszillator, der mit 8 MHz läuft, nicht mehr vier verschiedene
wie früher, die man mit Fuses ausgewählt hat.
Du kannst das auch ganz ohne Modifikation von CKDIV8 zur Laufzeit
umschalten:
oh, Danke.
Also das LCD DOGM163 funzt immer noch nicht.
Es ist alles gleich geblieben.
selbes Display, die selben zwei Kondensatoren (3.3V)
Genauso angeschlossen wie beim Atmega32.
Selber source code.
und denoch kein Erfolg
Irgendwas muss am Mega324p anders sein
ATmega324p an EA-DOGM163W-A
PC0-7 an D0-D7
PA0 (37) an RS (39)
PA1 (36) an R/W (37)
PA2 (35) an RES (40)
PA3 (34) an E (36)
Die Anschluesse sind die selben wie vorher beim ATmega32.
Der source genauso. ich habe diesmal sicherheitshalber nur
den UART benutzt und den original source der vorher funzte.
1
// PORTC data
2
#define CO_1 PORTA |= (1<<PA0)
3
#define CO_0 PORTA &= ~(1<<PA0)
4
5
#define RW_1 PORTA |= (1<<PA1)
6
#define RW_0 PORTA &= ~(1<<PA1)
7
8
#define RES_1 PORTA |= (1<<PA2)
9
#define RES_0 PORTA &= ~(1<<PA2)
10
11
#define E_1 PORTA |= (1<<PA3)
12
#define E_0 PORTA &= ~(1<<PA3)
13
14
#include"avr/io.h"
15
#include"util/delay.h"
16
#include"dogm.h"
17
18
// BEFEHLE
19
voidsetCommand(uint8_tdata){
20
_delay_ms(10);
21
22
DDRC=0xff;// ausgang
23
PORTC=data;
24
25
RW_0;
26
CO_0;
27
28
E_1;
29
_delay_us(50);
30
E_0;
31
}
32
33
// DATEN
34
voidlcd_putc(uint8_tdata){
35
_delay_ms(10);
36
DDRC=0xff;// ausgang
37
PORTC=data;
38
RW_0;
39
CO_1;
40
E_1;
41
_delay_us(50);
42
E_0;
43
}
44
45
voidlcd_init(){
46
PORTA&=~((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3));// Alle auf LOW
47
// als Ausgang
48
DDRA=(1<<DDA0)|(1<<DDA1)|(1<<DDA2)|(1<<DDA3);
49
50
PORTC=0x00;
51
DDRC=0xff;
52
53
_delay_ms(100);
54
CO_0;
55
RW_0;
56
E_0;
57
RES_0;
58
_delay_ms(100);
59
RES_1;
60
_delay_ms(100);
61
// Grundinitialisierung
62
setCommand(0x39);
63
setCommand(0x1D);// BS: 1/4, 2 Zeilen
64
// setCommand(0x50); // 52 Boster aus, Kontrast C5,C4 5Volt
65
setCommand(0x55);
66
setCommand(0x6C);// 69 Spannungsfolger und Verstärkung
67
// setCommand(0x77); // Kontrast C3,C2,C1 bei 5V
68
setCommand(0x7C);
69
setCommand(0x38);
70
setCommand(0x0F);// Display ein, Cursor ein, Cursor blinken