avr at90sub162 UART

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

mellan jord och maxim232 pin 11 5 volt
mellan jord och maxim232 pin 14 1.6-2 volt så inte i närheten av -10volt
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

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...
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

när jag jordar pin 11 för att få den låg/0:a så får jag 1.2volt ca på pin 14....

skulle det kanske kunna vara så att USB drivningen ej ger tillräkligt med kräm........ ?:?
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

dubbelkollat kondingarna, de sitter enligt databladet för 232:an
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

*Någonting* är i alla fall ganska fel.

Som sagt, 0/5 Volt in på MAX232 ska ge (ca/minst) +10/-10 V på RS232 sidan.

> skulle det kanske kunna vara så att USB drivningen

Vad har *USB* med detta att göra !!??
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

matar maxim 232 kretsen via avr lab kortet, som i sin tur får spänning från USBporten på min dator.

testade dock nu att mata maxim232 kretsen med en egen 7805:a som klara att ge 1amp, fortfarande samma egenheter. nollad 11 ger 1,2volt på 14...
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, MAX232'an verkar inte "starta".
Jag kopplar upp en likadan på kontoret
i morgon och kollar...
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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..
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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 >> 8); // 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
}
}
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

på max 232kretsen på pin 2 står det i databladets exempelkopking+10vjaghar ca 9volt bara, på 6 skall det va -10 där har jag minus 8.6v räcker deet ?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> nu alternerar max232s utgångar (rs232) mellan +9 alt -9

Perfekt !
RS232 specen säger + 5-15V i ena läget och - 5-15V i det andra, om
jag inte minns fel. +/- 10 eller 9 är utmärkt !

Alltså hade du gjort en tabbe förrut.

Du släppar jag det här, AVR vet jag inte ett smack om... :-)
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

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
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

har estat med en evighetsloop som bara kör ut 'g' om och om igen

vilken cpu som används väljer man i avr studio
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Baudrate?

Har du provat med lite olika baudrate för att se om det kommer ut någonting alls? Hyperterminal är tvärr rätt värdelöst för sådana här tester eftersom man riskerar att missa diverse kontrolltecken och annat som det gärna blir om man t.ex kör fel baudrate.
Skriv svar