Hallo zusammen,
kurze Frage,
ich erprobe gerade mein neues Board, welches einen Atmega64 verwendet.
Da ich das Datenblatt nicht richtig lesen konnte und gepennt habe,
musste ich nachträglich PDI/O mit MISO und MOSI von meinem ISP socket
verbinden.
Leider benutzt ich diese Leitung aber auch schon für meine Uart
Verbindung.
Sollte das ein Problem sein? Ich nehme an, sobald !Reset auf Low, wird
PE0 und PE1 dann zu PDI/O und hat keine Funktion mehr als RXD und TXD,
oder?
Aktuell habe ich es geschafft ein kleines Progammili, welches eine
wake-up message per Uart versenden sollte auf den µC zu überspielen.
Aber seit dem, lässt er sich nicht mehr programmieren. Hängt er jetzt
doch in irgendwelchen ISRs?
Gruß Georg
@ Schorsch (Gast)
>Sollte das ein Problem sein?
Ja:
>Ich nehme an, sobald !Reset auf Low, wird>PE0 und PE1 dann zu PDI/O und hat keine Funktion mehr als RXD und TXD,>oder?
Sicher, aber die ICs aussen wissen das nicht. Ganz besonders nicht der
IC (MAX232, FT232 oder sonstwas), die RXD treiben. Die musst du trennen
oder beim !RESET inaktiv schalten.
>Aber seit dem, lässt er sich nicht mehr programmieren. Hängt er jetzt>doch in irgendwelchen ISRs?
Nö. Am IC, der RXD aktiv treibt.
>Leider benutzt ich diese Leitung aber auch schon für meine Uart>Verbindung.>>Sollte das ein Problem sein?
Ja.
>Ich nehme an, sobald !Reset auf Low, wird>PE0 und PE1 dann zu PDI/O und hat keine Funktion mehr als RXD und TXD,>oder?
Das interessiert einen MAX232 der dort angeschlossen sein könnte
nicht die Bohne. Mach nen 4k7 zwischen Mäxchen und dem RxD Eingang,
dann passt das.
>Aber seit dem, lässt er sich nicht mehr programmieren. Hängt er jetzt>doch in irgendwelchen ISRs?
Nö, wahrscheinlich extern Clock statt Crystal Osc in den Fuses
eingestellt.
Jetzt hat er keinen Takt mehr.
Hi,
hm...
am UART hängt ein FTDI....
ich benutze einen extenen Taktgeber, habe dafür die lfuse of e0 gesetzt.
den FTDI habe ich mal eben "offgepowered" geht immer noch nicht.
Ich benutze einen avrisp2 als programmer, der zeigt mir zwar die 5V
Betriebsspannung an, meldet dann aber unknown status.
Meint ihr wirklich, dass ich die RXD Leitung trennen muß? Der Chip ist
doch schon aus
Schorsch
Schorsch schrieb:> am UART hängt ein FTDI....
ist wurscht.
Mit seinem Ausgang, der zum µC führt pfuscht er dir ins ISP rein.
> den FTDI habe ich mal eben "offgepowered" geht immer noch nicht.
d.h. Versorgungsspannung abgedreht?
> Meint ihr wirklich, dass ich die RXD Leitung trennen muß? Der Chip ist> doch schon aus
Dann 'versorgt' sich dein FTDI dann eben über die anderen Verbindungen
zu ihm und irgendwelcher dubioser Kanäle im Inneren des IC. Ein IC an
dem die Versorgungsspannung nicht angeschlossen ist, wohl aber die
Datenleitungen kann alles mögliche unvorhergesehene anstellen.
Also: in die Leitung muss ein Widerstand, der es dem Programmer erlaubt
an der ISP Leitung zu wackeln, ohne dass ihm der FTDI in die Quere
kommt.
Schorsch schrieb:> ich benutze einen extenen Taktgeber, habe dafür die lfuse of e0 gesetzt.
E0 ist 'externer Clock'. Aber Achtung: ein Quarz ist kein 'externer
Clock'.
Wenn dein externer Taktgeber ein Quarz ist, dann sitzt hier noch ein
Problem. Ist das ein kompletter Taktgenerator, dann ist alles ok.
Ihr seit toll
habe eine Stelle gefunden, wo ich die die RXD Leitung kappen konnte, wo
aber später auch noch ein Widerstand reinpasst - das ist bei 6mil gar
nicht so einfach :-)
Es geht!
Also, wenn ich nun 4k7 reintune, kann ich sowohl den UART als auch ISP
benutzen? Gibt es eine Baudratenlimitierung oder sowas?
Zum Taktgeber:
Ich benutze eins von diesen Dingern mit 4 Beinchen, wie heißen die?
Quarzoszillatoren?
Danke vielmals
Georg
>Also, wenn ich nun 4k7 reintune, kann ich sowohl den UART als auch ISP>benutzen? Gibt es eine Baudratenlimitierung oder sowas?
Also bis 115kBaud geht das bei mir problemlos.
Wenn du mehr willst kannst du auch auf 2k2 oder 1k runtergehen.
Was dein ISP Prommer halt so aushält.
Und schalte den FTDI nicht ab. Sonst bekommst du das gleiche
Problem mit der TxD Leitung. Oder auch da nen 4k7 in die Leitung
zum TxD Pin vom FTDI.
Hallo,
ich freu mich,
wie man sieht ist der 4k7 drin. Werd mal schauen, wie schnell ich damit
werden kann, wollte eigentlich schon gerne auf 230kBaud hoch, mal sehen
jetzt muß ich erstmal den UART ans laufen kriegen, hat jemand zufällig
gerade die Init-Routine für UART0 für einen mega64? ich bastele noch an
dem "8N1"
Georg
Hi
>jetzt muß ich erstmal den UART ans laufen kriegen, hat jemand zufällig>gerade die Init-Routine für UART0 für einen mega64? ich bastele noch an>dem "8N1"
Schon mal die Codebeispiele im Datenblatt angesehen?
MfG Spess
Hallo,
vielen Dank erstmal,
habe im Wesentlichen die Beispiele aus dem Datenblatt übernommen
Das ist die Init routine
1
/* Set baud rate */
2
uint16_tbaud=115200;
3
UBRR0H=(unsignedchar)(baud>>8);
4
UBRR0L=(unsignedchar)baud;
5
6
/* Enable receiver and transmitter */
7
UCSR0B=(1<<RXEN0)|(1<<TXEN0);
8
/* Set frame format: 8data, 2stop bit */
9
UCSR0C=(1<<USBS0)|(3<<UCSZ00);
das die sende-routinen
1
intuart_putc(unsignedcharc)
2
{
3
while(!(UCSR0A&(1<<UDRE0)))/* warten bis Senden moeglich */
4
{
5
}
6
7
UDR0=c;/* sende Zeichen */
8
return0;
9
}
10
11
12
voiduart_puts(char*s)
13
{
14
while(*s)
15
{/* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
16
uart_putc(*s);
17
s++;
18
}
19
}
alles scheint richtig angeschlossen, denn, wenn der ISP Programmer
loslegt empfange ich etliche Zeichen, nur wenn ich alle 500ms "puts"
aufrufe kommt nix
Any hint?
Georg
Schorsch schrieb:> /* Set baud rate */> uint16_t baud = 115200;> UBRR0H = (unsigned char)(baud>>8);> UBRR0L = (unsigned char)baud;
Das ist Doppelblödsinn. Zum einen paßt die Baudrate garnicht in den
Datentyp, zum anderen ist es totaler Quatsch, die Baudrate direkt in die
UBRR-Register zu schreiben. Da rein gehört nicht die Baudrate, sondern
das Ergebnis einer kleinen Berechnung, bei der der Systemtakt und die
Baudrate die Eingangsgrößen sind.
Details siehe das verdammte Datenblatt. Da steht sowas nämlich drin. Da
ist auch erklärt, was die UBRR-Register funktional machen, woraus sich
also die Formel für die Berechnung ergibt.