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
>Meint ihr wirklich, dass ich die RXD Leitung trennen muß? Der Chip ist >doch schon aus Und schliesst über seine Schutzdioden die RxD Leitung kurz.
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_t baud = 115200; |
3 | UBRR0H = (unsigned char)(baud>>8); |
4 | UBRR0L = (unsigned char)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 | int uart_putc(unsigned char c) |
2 | {
|
3 | while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */ |
4 | {
|
5 | }
|
6 | |
7 | UDR0 = c; /* sende Zeichen */ |
8 | return 0; |
9 | }
|
10 | |
11 | |
12 | void uart_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
Sorry, einen hab ich schon UBRR_VAL != baud better like this
1 | UBRR0H = (unsigned char)(UBRR_VAL>>8); |
2 | UBRR0L = (unsigned char)UBRR_VAL; |
tut immer noch nicht Schorsch
> uint16_t baud = 115200;
uint16_t geht bis 65535. Da bist du weit drüber.
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.
Dafür gibt's in der AVR Library schon ein praktisches Makro: http://www.nongnu.org/avr-libc/user-manual/group__util__setbaud.html
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.