PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erster UART Versuch... schaut mal bitte kurz drüber...



popi
17.06.2006, 04:33
... und sagt mir mal kurz, wo denn der Controller springt, wenn also ein Datenwort empfangen wurde?
Ich verstehe nicht, wie/wo man jetzt in den Code die Routine einbringt, die dann ausgeführt wird, wenn Daten empfangen werden.

Seid Ihr bitte so nett und könnt mir das in der Code an die richtige Stelle einfügen und erklären, damit ich das verstehe.

Danke im voraus und Grüße

popi

Hier der Code:



#include <avr/io.h>
#include <avr/interrupt.h>

void init(void)
{
SREG = 0x80; //Interrupts enable
UCSR1A = (1 << RXC1); //nötig für Interrupt
UCSR1B = (1 << RXCIE1) | (1 << RXEN1); //RxCompleteInterruptEnable und Receiver Enable
UCSR1C = (1 << UCSZ10) | (1 << UCSZ11); //8 Datenbits, 1 Stoppbit, keine Parität
UBRR1 = 0x51; //Baudrate 9600 bei 8MHz Quarz
}

void main(void)
{

init();

}

popi
17.06.2006, 14:30
Kennt sich denn keiner von Euch mit UART aus???
Ich muss es heute noch hinbekommen, das mein Controller Daten von der seriellen Schnittstelle meines Computers empfängt!!!

Helft mir doch mal bitte....

Gebe eine Kiste Bier aus... ;o)

Grüße
popi

Hanni
17.06.2006, 15:08
UCSR1A = (1 << RXC1); //nötig für Interrupt

diese Zeile dürfte unnötig sein, da dieses Flag vom Controller gesetzt wird *glaub*

izaseba
17.06.2006, 16:34
Das wäre dann ISR für Mega 8


ISR (USART_RXC_vect){
}


...wo ist das Bier ?

popi
17.06.2006, 16:38
Danke schon mal für die Bemerkung...

Wie schreibt man den einen Wert in das EEPROM?

Grüße

popi

PicNick
17.06.2006, 18:15
Zum Problem UART: Mit Interrupt ist die Sache etwas verschärft. Versuch es noch man wie in dem Beispiel
https://www.roboternetz.de/wissen/index.php/Sourcevergleich#GCC_.28Tastatur-Echo.29
sozusagen einmal grundätzlich.
Und dann erst stürz' dich in Interrupts und andere Schweinereien.

plusminus
17.07.2006, 19:52
Also ich habe auch ein Problem mit USART und wollt kein neuen Thread aufmachen:

Ich habe das myAVR Board 2.0 USB mit einem ATMega8L - 8PU drauf

Im Hyperterminal habe ich aktiviert:
Bps: 9600
Datenbits: 8
Parität: Keine
Stoppbits: 1
Flusssteurerung: Hardware

Also F_CPU hab ich auch schon 8Mhz probiert...

Habe schon mit Debug-LEDs rumgemacht und rausgefunden, dass er bei...

while ( !(UCSRA & (1 << RXC)) )

hängen bleibt. D.h. ja, dass keine Daten ankommen, oder ???


#include <avr/io.h>

#define F_CPU 3868400
#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)

//-----------------------------------------------------
void main()
{
char bZeichen;

UCSRB = (1 << RXEN) | (1 << TXEN);
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
UBRRL = (unsigned char) USART_BAUD_SELECT;

while (1)
{
while ( !(UCSRA & (1 << RXC)) )
{}
bZeichen = UDR;

while (!(UCSRA & (1 << UDRE)))
{}
UDR = bZeichen;
}
}


Jemand ne Idee?

linux_80
17.07.2006, 21:11
Hallo,

normalerweise hats keine Flusssteuerung
evtl. wartet da einer drauf.

plusminus
17.07.2006, 22:20
Funkt auch nciht...

PicNick
18.07.2006, 07:25
Schau mal

https://www.roboternetz.de/wissen/index.php/Sourcevergleich#Tastatur-Echo

d.h, wenn es trotzdem nicht funzt:
Flußsteuerung: none
Der Quarz muß stimmen ! (+Fuses)
Und die Verbindung µC <> PC muß auch passen !



Tip: Mach erstmal "Hello, world !"

BT
18.07.2006, 07:52
hallo plusminus

hast du mal das das terminal (Controlcenter) vom myavrworkpad probiert? im workpad kannst du auch nach dem board suchen lassen.

cu BT

plusminus
18.07.2006, 08:42
Thx für die Antworten

@PicNick: Bin nicht der aus dem ersten Thread :P. Passiert mir auch öfters ^^
Ich hab mit dem myAVR QuickProg den externen Quarz aktiviert und der löuft mit 3,8684MHz(=3868400).
Die Verbindung sollte auch stimmen, da ich meine AVR's ja damit brennen kann.

@BT: Das Board wurde ja gefunden, brennen kann ich die AVR's wie gesagt ja auch, nur die USART-Kommunikation will nicht...
(Also mim Terminal vom myavrworkpad hab ichs noch nicht probiert..., myAVR-Quickprog hat auch nen Terminal dabei ... mal schauen)

SOnst noch jemand ne Idee...?

PicNick
18.07.2006, 08:50
Einer der einfachsten Versuche ist es, einfach mal Rx/Tx auf der Leitung auszukreuzen/umzudrehen. Passieren kann nix, ist kurzschlußfest

BT
18.07.2006, 11:02
wenn du den mySmartUSB und nicht das myAVR-Controlcenter nutzt musst du von hand in den Datenmodus schalten. Das macht man über die DIP-Schalter. Denn sonst kommunizierst du mit der AVR910 Firmware auf dem Programmer statt mit deinem Controller. das Controlcenter schaltet softwareseitig um das kann das hyperterminal natürlich nicht. Ich glaub es war DIP2. Beim zurückschalten in den Programmiermodus musst du dann ein RESET geben das ist DIP4.

cu BT

Murphywareinoptimist
24.07.2006, 21:55
Ich habe das gleiche problem mit dem Myavr Board. (Parallel V1.5)

Das Beispiel für senden und empfangen funktioniert mehr schlecht als recht. Ist mehr zufall wenn mal der richtige buchstabe empfangen wird.

Das Beispiel für nur senden vom mega8 aus funktioniert überhaupt nicht.

Hat jemand das selbe problem gehabt?

plusminus
24.07.2006, 22:27
Überprüfe mal, ob du die richtige Frquenz eingetellt hast.

Wenn du willst, schick ich dir die Lösung.

Murphywareinoptimist
24.07.2006, 23:07
Hi!

Beim quickprog habe ich den externen Quarz aktiviert. Wird trozdem nicht übertragen was ich eingebe. Kommen andere buchstaben an.

Bei den beispielprogrammen wird die Frequenz automatisch angepasst. Die Bautrate stimmt auch.

Bin ziemlich ratlos. Das einzige was ich noch nicht probiert haben ist die externe spannungsversorgung zu benutzen. Das sollte es aber nicht sein. Wenn die Versorgungsspannung zu gering ist sollte doch gar nichts mehr gehen...

na ja für heute ist erst einmal schluß

CYA

plusminus
24.07.2006, 23:09
bei mir hats wie gesagt auch nicht gefunzt...

Wenn du die Lösung willst --> PN :!:

BT
25.07.2006, 07:06
Hallo Murphywareinoptimist,

beim LPT-Board solltest du unbedingt ne externe spannungsquelle anschließen wenn du über die rs232 kommunizieren willst... der max ist ne ladungspumpe der die pegel auf +-12V hebt und das zieht doch etwas mehr strom und das sollte man nicht aus dem lpt-port ziehen... probiers noch mal mit externer spannungsversorgung!

cu BT

Murphywareinoptimist
25.07.2006, 20:16
Hallo!

Es lag wirklich an der externen Spannung. Nun ist aber ein anderes Problem aufgetreten. Mit externer Spannung findet er das Board nicht. Ich muss also zuerst brennen und dann die externe Spannungsquelle zuschalten. Dann funktioniert alles.
Ich verwende zwar keine Blockbatterie sondern ein altes Druckernetzteil mit 12V Leerlaufspannung aber bei der fast paranoid wirkenden Schutzbeschaltung und dem 7806 kann es daran ja kaum liegen.
Na ja damit kann ich jetzt aber leben. Werde ich halt noch einen Schalter in die Zuleitung einbauen.

Gruß Olli