Hallo i sende mit dem Programm siehe Anhang HTerm.exe eine 1 als Ascii über die RS232 Schnittstelle Leider weiß ich nicht genau wie ich das UDR abfragen kann??? mit If()...usw Wenn ich die Daten empfangen habe möchte ich auch das PA0 auf high ist. mfg Mathias Koch
Gast
#498129
x = UDR; if (x=='1') PORTA |= (1<<PA0); Man könnte auch if (UDR == '1') ... schreiben. Das verhindert aber ein weiteres Verwenden der Daten. Man könnte mit der ersten Version noch if (x=='2') PORTA |= (1<<PA1); machen, was mit der zweiten nicht mehr geht.
I send mit HTerm.exe a ascii 1 aber der PORTA = 0x01 bim Atmega 32 funzt einfach ned mfg Mathias
Gast
#498174
Könntest du bitte nur das C-file posten!? Mit .rar können nicht alle umgehen. Und der C-code sollte reichen...
Hier wäre das file Schick ein Ascii 1 mfg Mathias
Gast
#498202
Die Daten vom AVR kannst du am Terminal sehen?
ja i kann daten vonm up zu pc senden
Und was ist, wenn du einfach nur machst:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Du müsstest alles was du ins HT hineintippst auch vom HT angezeigt kriegen. Funktioniert das?
Nein Was muss man sonst noch was definieren RXD und TXD Port??? Passt der Code serial.c oben mfg Mathias
Muss RXD und TXD jeweils auf 1 liegen
Mathias Koch wrote: > Nein > Schlecht. Aber du siehst im Hyperterminal den Text ATMEGA32. Das heist für mich, dass das Kabel und der MAX232 zumindest in Hinrichtung (µC an PC) funktioniert. Hast du im Hyperterminal, die Flusssteuerung auf 'keine' gesetzt? Ganz sicher?
ja hab ich
Das wäre der Code wo liegt der Fehler darin???
void uart_init()
{
// UART Transmitter anschalten
// Data mode 8N1, asynchron 4800 1MHZ
UBRRH = 0; // Highbyte ist 0
UBRRL = 12; // Lowbyte ist 12 ( dezimal )
//UCSRB = (1 << TXEN)
//gleiche wie UCSRB = 0x08;
UCSRB = (1 << TXEN)|( 1 << RXEN ); // UART TX RX einschalten
//UCSRC =(1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0)
//gleiche wie UCSRC = 0x86
UCSRC =(1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
}
///////////////////////////////////////////////////////
void uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE))) //warten bis senden möglich ist
{
}
UDR = c; //Ausgabe des Zeichens über UDR
}
/////////////////////////////////////////
/////////////////////////////////////////
char uart_receiver(void)
{
while (!(UCSRA & (1<<RXC))); /* Wait for incomming data */
if(!(UCSRA & (1<<RXC))) /* Return the data */
return UDR;
}
//////////////////////////////////////////
void uart_puts (char *s)
{
//schleife wird so lange ausgeführt bis kein Zeichen mehr kommt
while (*s)
{
uart_putc(*s);
s++;
}
}
///////////////////////////////////////////////////////
int main(void)
{
DDRA = 0x01; ///Ausgang
char buffer;
uart_init();
for(;;)
{ //Init den Uart siehe oben Unterprogramm
uart_puts("ATMEGA 32");//uart_puts liest einzelne Zeichen und gibt sie
aus
buffer = uart_receiver();
if(buffer == '1')
{
PORTA = 0x01;
}
Gast
#498427
Dein Controller sendet dauernd "ATMEGA 32" an den PC? Pack das mal vor die Schleife.
Was könnte sonst noch der Fehler sein?? Stimmt die Empfangs Routine und die Überprüfung im If() hier noch ein Bsp wie ich die Daten sende mfg Mathias
Gast
#498491
Versuch' mal 'c' als 'volatile' zu definieren, am Besten global, dann sollte es gehen.
Daten empfangen geht ja nur nicht senden i vielleicht mein code falsch oder an was liegst sonst noch
Ich glaube das RXC Flag nicht ausgelöst wird und deshalb nich die daten ind UDR gelangen was muss ich deshalb tuan mfg Mathias
Gast
#498629
Probier das mal:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
Ne geht leider auch nicht hab mal ein Bild der RS232 Schaltung beigelegt ATMEGA 32 gibt es immer aus nur bei "uart_receiver(); " denke i mal hägt sich das programm auf RXD auf PDO TXD auf PD1 mfg
C8 ist verkehrt rum. V- ist negativer als GND. Also muss der + Anschluss vom Elko nach GND. http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
ja hab ich geht auch nicht mit dem AVR Simulator funtkionierts wenn ich RXC auf eins setze
Gast
#498686
>ja hab ich geht auch nicht mit dem AVR Simulator funtkionierts wenn ich >RXC auf eins setze Da fehlen Satzzeichen... Meinst du: "ja, hab ich. Geht auch nicht. Mit dem AVR Simulator funtkionierts, wenn ich RXC auf eins setze." ? Dann sieht es so aus, als würde dein RXD-Pin kein Signal bekommen. Das einfachste wäre dann, den RX- und TX-Pin des MAX232 auf der TTL-Seite direkt miteinander zu verbinden (ohne Mikrocontroller dran). Dann solltest du im Terminalprogramm genau das sehen, was du auch schickst ("hardwired Echobetrieb"...).
Oben angezeigtes bild T1out 14 hat 6.61 Volt R1out hat 0 Volt Wenn ich das Kabel mit 2-3 verbinde kommt was beim hyp term raus wenn ich T1out und R1out verbinde tuat sich nix
Gast
#498707
>wenn ich T1out und R1out verbinde tuat sich nix
Du meinst damit wirklich die Pins 14 und 12?
Die sollte man nicht miteinander verbinden...
Verbinde mal Pin 11 und 12.
11 und 12 Verbunden tuat sich nix
Gast
#498711
Dein MAX hat einen an der Waffel...
Pin 8 und 9 waren mal auf GND weil der Kollege einen fehler gemacht hat kann es sein das er deshalb nich geht?? 7 auf 7,60 8 auf 0 9 auf 4,7 10 auf 3,6 11 auf 4,69 12 auf 4,67 13 auf 0 14 auf 6,92
Hast du den Elko schon umgedreht? Noch mal: C8 ist verkehrt rum in der Schaltung!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.

