avr at90sub162 UART
Och när pinne 11 = 0V (d.v.s "låg" ) ?
RS232 utgångarna på MAX232 ska "svinga" mellan RS232 nivåer.
Normalt brukar det vara ca +/- 10 till 12 V.
D.v.s "hög" på pin11 -> - 10-12 V på RS232 pinnen.
"låg" på pin 11 -> + 10-12 V på RS232 pinnen.
Det låter som om spänningspumparna inte har startat.
Vi kan bara hoppas att du har kopplat in kondingarna rätt...
RS232 utgångarna på MAX232 ska "svinga" mellan RS232 nivåer.
Normalt brukar det vara ca +/- 10 till 12 V.
D.v.s "hög" på pin11 -> - 10-12 V på RS232 pinnen.
"låg" på pin 11 -> + 10-12 V på RS232 pinnen.
Det låter som om spänningspumparna inte har startat.
Vi kan bara hoppas att du har kopplat in kondingarna rätt...
gjorde en sista dubbel och trippelkoll, kopplingen min är exact enligt databladets koppling för 232 varianten med 1uF kondingar.
0v på 11 ger 1,2vpå 14
5v på 11 ger 2,drygt på 14
intressant oxå är när jag mäter på uC PD3 UTAN att koppla in 232:an får jag 5volt, kopplar jag in 232:an sjunker det till 4.22volt...
men nu ere sovdax,
tack för hjälpen iaf.
edit:
i databladets koppling har dom skrivit på pin 2 10v och pin 6 -10v
jag har ca 2.5v på dem båda..
0v på 11 ger 1,2vpå 14
5v på 11 ger 2,drygt på 14
intressant oxå är när jag mäter på uC PD3 UTAN att koppla in 232:an får jag 5volt, kopplar jag in 232:an sjunker det till 4.22volt...
men nu ere sovdax,
tack för hjälpen iaf.
edit:
i databladets koppling har dom skrivit på pin 2 10v och pin 6 -10v
jag har ca 2.5v på dem båda..
har nu lödigt allt på labkort istället för att använda kopplingsplintlabkort
nu alternerar max232s utgångar (rs232) mellan +9 alt -9 när jag alternerar tillhörande ingång. Så kopplingen verkar fungera.
koden jag använder kör med UCSR1C = (3<<UCSZ10); för att sätta 8n1 hoppas jag, annars är koden som jag postar korrekt
funkar dock ej fortfarande. PD3 går hög och förblir hög
postar nyaste koden
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000
#endif
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
int main (void)
{
char ReceivedByte;
DDRD = 0b01111111; //7 0
PORTD = 0b00000000;
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
//UCSR1C |= (1 << URSE1L) | (1 << UCSZ10) | (1 << UCSZ11); // Use 8-bit character sizes
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
//UBRR1L = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
//UBRR1H = (BAUD_PRESCALE >>
; // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
for (;;) // Loop forever
{
while ((UCSR1A & (1 << RXC1)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
while ((UCSR1A & (1 << UDRE1)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
}
nu alternerar max232s utgångar (rs232) mellan +9 alt -9 när jag alternerar tillhörande ingång. Så kopplingen verkar fungera.
koden jag använder kör med UCSR1C = (3<<UCSZ10); för att sätta 8n1 hoppas jag, annars är koden som jag postar korrekt
funkar dock ej fortfarande. PD3 går hög och förblir hög
postar nyaste koden
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000
#endif
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
int main (void)
{
char ReceivedByte;
DDRD = 0b01111111; //7 0
PORTD = 0b00000000;
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
//UCSR1C |= (1 << URSE1L) | (1 << UCSZ10) | (1 << UCSZ11); // Use 8-bit character sizes
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
//UBRR1L = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
//UBRR1H = (BAUD_PRESCALE >>

for (;;) // Loop forever
{
while ((UCSR1A & (1 << RXC1)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
while ((UCSR1A & (1 << UDRE1)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
}
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Har du testat med att endast skicka ut t.ex ett "X" kontinuerligt
Istället för att både få sändning och mottagning att funka i ett och samma
försök.... Tryck ut ett ascii "x" i en evighetsloop och se om det rasslar ut något....
Är kass på C... men måste man inte tala om vilken processor
som man använder?
Swech
Istället för att både få sändning och mottagning att funka i ett och samma
försök.... Tryck ut ett ascii "x" i en evighetsloop och se om det rasslar ut något....
Är kass på C... men måste man inte tala om vilken processor
som man använder?
Swech
labbat äm er och pratat med en del avr gurus
så här ser koden ut nu
#include <avr/io.h>
#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 8000000
#endif
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
int main (void)
{
char ReceivedByte;
DDRD = 0b01111111; //7 0
PORTD = 0b00000000;
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
// sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed
for (;;) // Loop forever
{
// while ((UCSR1A & (1 << RXC1)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
// ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
ReceivedByte = 'U';
while ((UCSR1A & (1 << UDRE1)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
}
/*
ISR(USART_RXC_vect)
{
char ReceivedByte;
ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
*/
anledningen att jag kör ut 'U' i en loop forever är att AVR:ens PD3 kommer om allt fungerar mäta med en voltmeter 2.5volt (tänk pwm).
voila! PD3 mäter 2.5Volt och kopplas in på max232 pin 10, mäter fortfarande 2.5v. Mäter nu på max232 pin 7 (rs232 ut) jag antar att mina 0,14 volt är signal på att det fungerar, medel av 9volt och -9volt borde bli ca 0v. liksom medlet av 0v och 5volt blev 2.5 på ttl sidan
så ser super ut.
Kopplar in PC,sserieport kör hyperterm med 8n1. ochinget kommer up
testar att kortsluta max232 7 och 8 och trycker en tangent i hyperterminalen och den ekas tillbaka, altså använder jag rätt sladdar från pcn:s comport.
testade oxålite desperat att byta pc:ns com TXD ochRXD mot max 232, ifallman kopplat fel där, sån tur hade jag dock ej....
koden har ej någon rad som sätter 8n1, detta har jag nu frågat runt om, och ALLA AVR från atmel sätter sin usart 8n1 om inga bitar för det sätts
någon som har någe bra förslag ? jag e torr i skallen
så här ser koden ut nu
#include <avr/io.h>
#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 8000000
#endif
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
int main (void)
{
char ReceivedByte;
DDRD = 0b01111111; //7 0
PORTD = 0b00000000;
UCSR1B |= (1 << RXEN1) | (1 << TXEN1); // Turn on the transmission and reception circuitry
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
// sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed
for (;;) // Loop forever
{
// while ((UCSR1A & (1 << RXC1)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
// ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
ReceivedByte = 'U';
while ((UCSR1A & (1 << UDRE1)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
}
/*
ISR(USART_RXC_vect)
{
char ReceivedByte;
ReceivedByte = UDR1; // Fetch the recieved byte value into the variable "ByteReceived"
UDR1 = ReceivedByte; // Echo back the received byte back to the computer
}
*/
anledningen att jag kör ut 'U' i en loop forever är att AVR:ens PD3 kommer om allt fungerar mäta med en voltmeter 2.5volt (tänk pwm).
voila! PD3 mäter 2.5Volt och kopplas in på max232 pin 10, mäter fortfarande 2.5v. Mäter nu på max232 pin 7 (rs232 ut) jag antar att mina 0,14 volt är signal på att det fungerar, medel av 9volt och -9volt borde bli ca 0v. liksom medlet av 0v och 5volt blev 2.5 på ttl sidan
så ser super ut.
Kopplar in PC,sserieport kör hyperterm med 8n1. ochinget kommer up

testar att kortsluta max232 7 och 8 och trycker en tangent i hyperterminalen och den ekas tillbaka, altså använder jag rätt sladdar från pcn:s comport.
testade oxålite desperat att byta pc:ns com TXD ochRXD mot max 232, ifallman kopplat fel där, sån tur hade jag dock ej....
koden har ej någon rad som sätter 8n1, detta har jag nu frågat runt om, och ALLA AVR från atmel sätter sin usart 8n1 om inga bitar för det sätts
någon som har någe bra förslag ? jag e torr i skallen