Kani-Coaching (C lernen mit Nomis)



CodeBox c

#include <avr/io.h>



// =================================
// ===== USART initialisieren =====
// =================================

void init_usart ()
{
// Baudrate festlegen (Datenblattseite 190)
UBRR0L = 129;

// USART auf senden und empfangen einstellen
UCSR0B = (1<<RXEN0)|(1<<TXEN0);

// Stopbits einstellen. (USBSn auf 1 = 2 Stopbits - 0 = 1 Stopbit?
UCSR0C = (1<<USBS0)|(3<<UCSZ00);

// 8-bit Übertragung
UCSR0C |= (1<<UCSZ01) | (1<<UCSZ0);
}

// =================================
// ===== USART-Sendefunktion =====
// =================================

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}

// =================================
// ===== USART-Empfangsfunktion =====
// =================================

unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get and return received data from buffer */
return UDR0;
}

int main(void)
{
while(1)
{
}
}











Das ist das Ergebnis von den gestrigen Abend. Leider kann der Compiler nichts mit UCSZ0 anfangen. Das Bit gibte aber, es liegt auch in diesem Register.
 
Problem gelöst. Die Sachen von Pollin sind auch vor 10 min eingetroffen.
Jetzt kann es losgehen =)
 
Hab mal bisschen gebastelt. Das Ergebnis im Anhang.
Dann kann ich jetzt ja anfangen. Weiß jemand wie ich ein Quarzoszilator (Viereckig mit 4 Beinchen) anschließen muss?

Ich könnte noch ein paar "Quick-Tips" gebrauchen. Könnte mal bitte jemand in den Chat kommen?

EDIT: Hab den Anhang vergessen *pust*
 

Anhänge

  • IMG_0192.JPG
    IMG_0192.JPG
    32 KB · Aufrufe: 6
Dino bist du dir sicher, dass der Schaltplan oben passt?

Ich hab alles nochmal neu angeschlossen und bin zu 90% der Meinung, dass es so passt.
Der bisherige Code sieht so aus:


CodeBox c
#include <avr/io.h>



// =================================
// ===== USART initialisieren =====
// =================================

void init_usart ()
{
// Baudrate festlegen (Datenblattseite 190)
UBRR0L = 129;

// USART auf senden und empfangen einstellen
UCSR0B = (1<<RXEN0)|(1<<TXEN0);

// Stopbits einstellen. (USBSn auf 1 = 2 Stopbits - 0 = 1 Stopbit?
UCSR0C = (1<<USBS0)|(3<<UCSZ00);

// 8-bit Übertragung
UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00);
}


// =================================
// ===== USART-Sendefunktion =====
// =================================

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}

// =================================
// ===== USART-Empfangsfunktion =====
// =================================

unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get and return received data from buffer */
return UDR0;
}


int main(void)
{
init_usart();

while(1)
{

//USART_Transmit(USART_Receive());
USART_Transmit('a');


}
}

Er sollte laut Nomis ein "a" senden. Das Funktioniert aber nicht. Die LED an R2OUT leuchtet.
[LED R2OUT ist Blau | LED T2IN ist Rot]

1. Strom an (Nichts leuchtet, außer das die ISP-Programmer LED grün wird. (Normal))
2 CodeVision AVR öffnen (Terminal). Die Blaue LED blitz einmal kurz auf.
3. Klick auf Connect (Blaue LED leuchtet dauerhaft)
4. Jetzt sollte ich ja in einem Fenster as reinbekommen. Passiert aber nichts, die LED bleibt immer an.
5. Terminal schließen (LED geht wieder aus)
 
Quarzofen

Hallo,
hab's gerade ausprobiert.

Also, dreh das Ding um, so daß Du auf die Beinchen schaust.
Bei meinem "Ofen" ist eine Gehäuseecke nicht so stark abgerundet.
Die weist jetzt nach rechts unten.

Dann ist links unten ein Anschluß ohne Isoliermasse direkt mit dem Gehäuse verbunden.
Hier habe ich 0V von 5 Volt angeschlossen.
Direkt darüber (links oben) ist der +5 Volt- Anschluß.
Hier habe ich ein Multimeter angeschlossen. Das Ding zieht etwa 22 Miliiampere.
Die Anschlüsse rechts sind die Ausgänge.

Das Mittelwellenradio pfeift an mehreren Stellen, wenn ich den Ofen einschalte. (Oberwellen bzw. Spiegelfrequenz).

Grober Test.
Auf jeden Fall erst mit Strombegrenzung fahren, damit nichts kaputt geht.
(Strommessung einschleifen!).

Schließe gleich mal das Oszilloskop an. und schaue, welcher Ausgang mit Masse verbunden werden kann.

Also, der Anschluß rechts oben ist "heiß".
Wird der kurzgeschlossen, steigt der Strom auf über 180 mA an.
Der Anschluß rechts unten, also der an der nicht so abgerundeten Ecke ist die Oszillator-Masse.
Auf der Vorderseite des Gehäuses ist da auch ein Punkt markiert.

Gruß von Oskar01
 
Ich habe meinen Beitrag oben editiert. Also bei mir sind alle ecken gleich. Ich habe den MAX232CPE bestellt. Allerdings steht auf dem IC selbst:
85EY59K E4
MAX232N

Ich habe kein Datenblatt für den MAX232CPE gefunden also habe ich das von Reichelt genommen:
http://www.reichelt.de/?;ACTION=6;L...wQAR8AAFnMa2094f4cea07458ed70dc9c71dcc4ad6e43

Bei diesem dann das obere mit TEX. Ich nehme an, dass V+ und V- in Dinos Schaltplan Vs+ und Vs- im Datenblatt sind.
 
Pins abzählen

Hallo,
also zum MAX232:
Hier hilft Abzählen der Pins.
Von oben gesehen, also, so wie das Ding in die Fassung gesteckt wird:
Fangen wir oben links an.
(Die Kerbe zeigt nach links).

Pin 16: (obere Reihe, ganz links)
bei mir: + 5 Volt (Vcc)

rechts daneben, Pin 15: Masse 5 Volt (Gnd)
(zwei Löcher nach oben einen Elko gelötet zur Entkopplung.)

dann weiter nach rechts: Pin 14: Transmitter 1 Out (Also an TXD von der 9-poligen Sub-D-Min-Buchse)

einen Pin weiter nach rechts: Pin13: Receive 1 In . (Also an RXD der 9-poligen Sub-D-Min-Buchse.)
jetzt weiter nach rechts: Pin 12: Receive 1 Out geht an den Prozessor. (PD0)RXD
dann einen Pin nach rechts: Pin 11: Transmitter 1 In: (geht an Prozessor) (PD1)TXD

Pin 9 und 10 bleiben bei mir offen.

Jetzt rutscht der Blick nach unten auf die "untere" IC-Beinchenreihe:

Wir gehen wieder ganz nach links:
Das ist Pin 1: Hier kommt ein Elko mit dem Pluspol dran.
Dessen Minuspol kommt an Pin 3 (- wir überschlagen einen Pin -).

An Pin 2 kommt jetzt ein Elko mit dem Pluspol, dessen Minuspol an Masse.

Bei Pin 4 und 5 ist's einfacher: Da kommt jetzt ein Elko dran. Und zwar an Pin 4 mit dem Pluspol, mit dem Minuspol an Pin 5.

Pin 6 bekommt auch einen Elko verpaßt: Allerdings ist hier der Minuspol am
Pin 6 und der Pluspol an Masse.

Pin 7 bleibt bei mir offen.
Pin 8 bleibt auch offen.

(Das Ding hat noch eine zweite Txd/RxD-Suite - ok. für zumindest einen der so zahlreichen Handshakes(Händscheiks). Das soll uns aber hier nicht interessieren.)

Man sieht, die RXD und TXD Anschlüsse sind alle auf einer Seite, hier also "oben".
Schon irgendwie benutzerfreundliches Layout.


Das war's.

Gruß von Oskar01
 

Anhänge

  • MAX232a.PNG
    MAX232a.PNG
    59,2 KB · Aufrufe: 3
  • MAX232b.PNG
    MAX232b.PNG
    17,3 KB · Aufrufe: 2
abweichende RXD/TXD-Belegung

Hallo,
im Beispiel wird statt der 2. Suite die erstere verwendet.
Also, nicht durcheinanderkommen.

-))

Gruß von Oskar01
 
Hallo ,

im Beispiel wird statt der 2. Suite die erstere verwendet.
Also, nicht durcheinanderkommen.
-))
Ich nehme normalerweise den 2ten Satz an Receiver/Driver weil die Pins dann
schöner sortiert sind. Eine IC-Seite an RS232 zum PC und die andere IC-Seite
zum ATmega. Aber ist auch Geschmackssache :D

Gruß
Dino
 
Bin grad am ausprobieren. Das ist der Controller. (Reichelt: ATMEGA 644-20 PU).
Welches Datenblatt muss ich da nehmen?
ATMEGA644P.pdf oder? Weil das mit dem ATMEGA644-xx.pdf ja auch passt.

Es ist ja richtig, dass ich TXD0 und RXD0 statt TXD1 und RXD1 nehme oder?
Hab noch was rausgefunden.
1. Stom an => Rote LED leuchtet
2. RSR232 Stecker auf die Buchse ohne USB-Eingesteckt!! => Blaue LED leuchtet schwach und Rote unverändert.
3. USB-Stecker an PC => Blaue leuchtet heller.

Stören die LED vllt. den Datenfluss?

Komisch oder?

 
Bei solchen Hardwareproblemen ist das Helfen immer irgendwie schwierig.
Gib doch mal die LEDs raus, sieh dir die Pinbelegung der RS232 Buchse an, miss die Spannungen an den Kondensatoren des Max232 und zeichne uns mal einen Plan wie du es verdratet hast.
Es werden außer dem Spannungsregler eh keine Bauteile warm, oder?
 
Anhang anzeigen 887
Das ist der Schaltplan.

C3 = 8,40V
C4 = 8,90V
C5 = 4,47V
C6 = 8,90V

Wenn die RSR232 Belegung so wie auf dem Schaltplan ist, passt es...
Bin grad am ausprobieren. Das ist der Controller. (Reichelt: ATMEGA 644-20 PU).
Welches Datenblatt muss ich da nehmen?
ATMEGA644P.pdf oder? Weil das mit dem ATMEGA644-xx.pdf ja auch passt.
Es ist ja richtig, dass ich TXD0 und RXD0 statt TXD1 und RXD1 nehme oder?
Stören die LED vllt. den Datenfluss?
 
Ja ich weiß ich bin auf deine Fragen kaum eingegangen.
1) Nimm das Datenblatt vom 644P.
2)Weiß nicht genau was du meinst.
3)Die LEDs sollten in dem Fall nicht stören.

Die Spannungen sollten halbwegs passen. Aber ich glaub du hast RXD und TXD Steckerseitig vertauscht.(kann mich aber auch irren)
 
Schau dir mal das Datenblatt an:
Da gibt es bei PIN 16 und 17 noch RXD1 und TXD1. Ich nehme aber die dadrüber, also die mit 0 am Ende richtig?
 
Ich dachte der MAX 232 hätte nur 16 Pins. (ich versteh nicht ganz)
Gibt es einen Link zum Datenblatt?


Hast du schon versucht RxD und TxD am Stecker zu vertauschen?
 
Jap, so wie es am Anfang war, wird die blaue LED heller und dunkler wenn ich bei CodeVisionAVR auf Conntect/bzw. Disconnect klicke.
Wenn ich jetzt auf Connect klicke geht die Blaue LED ganz aus und wenn ich auf Disconnect klicke wieder an. Wenn ich die Buchse aus dem Steckboard ziehe leuchtet auch nur die Rote. Wo steht eigentlich das Empfangene? Auch da wo wir letztens geschrieben haben - Nomis?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)