- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 36

Thema: Anfänger in C sucht Tutorial-Empfehlung

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    Praxistest und DIY Projekte
    Hast du die LED gegen VCC oder GND geschaltet, wenn gegen VCC dann geht sie nur so kurz an das du es kaum siehst, zu RS232 bin ich noch nicht gekommen "MITTAGESSEN"

  2. #12
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    den port als ausgang setzen könnte helfen:
    Code:
    DDRB = (1 << PB2);  // Pin PB2 als ausgang
    gruesse

  3. #13
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Hallo Hubert.G

    hoffentlich hat´s geschmeckt . Danke schon mal jetzt für Deine Mühe.

    Ich habe das natürlich in Assembler getestet (mit demselben Aufbau ) - weil ich mir nicht über den Weg traue:
    Code:
    ;===================================================================================
    ;* Schaltung ZU Test "erstes C-Programm" ###>>> t2313, auszugsweise         
    ;                                                                  
    ; Vcc -----------t2313-----+------------Vcc                        
    ;                          |                                       
    ;                          |   +------+   rLED|\ |                
    ;                          +---+ 100R +-------| >+---+             
    ;                              +------+       |/ |   |             
    ;                                                    |             
    ;                t2313-PB1=pin13---------------------+             
    ;                                                                  
    ;                                                                  
    ; GND-------------------------------------------------GND          
    ;                                                                  
    ;===================================================================================
    ; Speicherbelegung
    ;r16 Mehrzweck, high-Byte in Pausen "pause_an", "pause_aus", "led_ende" u.ä.
    ;
    ;===================================================================================
    ; Deklarationen und Konstanten für den Praeprozessor
    #define	a	r16	;Kurzbezeichung für Allzweckregister r16
    ;
    ;===================================================================================
    
    #include "tn2313def.inc"
    
    ; Interrupthandler-Tabelle (aus AT2313_doc2535.pdf, Seite 42)
    ;	Address		Code	Labels		;Comments
    .org	0x0000	rjmp	reset		;Reset Handler
    
    .org	0x0001 	reti	; INT0		;External Interrupt0 Handler
    .org	0x0002	reti	; INT1		;External Interrupt1 Handler
    .org	0x0003	reti	; TIM1_CAPT	;Timer1 Capture Handler
    .org	0x0004	reti	; TIM1_COMPA	;Timer1 CompareA Handler
    .org	0x0005	reti	; TIM1_OVF	;Timer1 Overflow Handler
    .org	0x0006	reti	; TIM0_OVF	;Timer0 Overflow Handler
    .org	0x0007	reti	; USART0_RXC	;USART0	rX Complete Handler
    .org	0x0008	reti	; USART0_DRE	;USART0,UDR Empty Handler
    .org	0x0009	reti	; USART0_TXC	;USART0 TX Complete Handler
    .org	0x000A	reti	; ANA_COMP	;Analog Comparator Handler
    .org	0x000B	reti	; PCINT		;Pin Change Interrupt
    .org	0x000C	reti	; TIMER1_COMPB	;Timer1 Compare B Handler
    .org	0x000D	reti	;IRS für Timer0 CompareA Handler (t2313)
    .org	0x000E	reti	; TIMER0_COMPB	;Timer0 Compare B Handler
    .org	0x000F	reti	; USI_START		;USI Start Handler
    .org	0x0010	reti	; USI_OVERFLOW	;USI Overflow Handler
    .org	0x0011	reti	; EE_READY		;EEPROM Ready Handler
    .org	0x0012	reti	; WDT_OVERFLOW	;Watchdog Overflow Handler
    ;
    ;===================================================================================
    ; Hauptprogramm
    ;===================================================================================
    ;
    reset:		;=== Generelle Initialisierung
    		; Zuerst RAMEND und Stack definieren;
    	ldi	a,RAMEND	;Ram Ende des tiny2313
    	out	SPL,a	;Stack Pointer tiny2313 setzen
    ;
    anfang:		;=== Nur ein Dummy-Hauptprogramm mit einer leeren Schleife
    ;
    	rcall  	mc_init		;Initialisiere den Mikrocontroller
    ;
    	sbi	portb,2
    ;
    anfang2:
    	rjmp	anfang2
    ;		
    ;===================================================================================
    ; Prozeduren
    ;===================================================================================
    ;
    ;
    ;===================================================================================
    ; Initialisierungprozeduren, für µC, ADC und Timer-ISR
    ;===================================================================================
    ;
    mc_init:	;=== Initialisiere Mikrocontroller
    		;ALLE Register initialisieren hier := pull-ups einschalten
    ;
    	ldi	a,0b11111111	;
    				;Datenrichtung "Ausgänge" für ports 0 - 7
    	out	ddrb,a	
    	ldi	a,0b00000000
    	out	portb,a		;  ports aus-(=) oder ein(1)schalten;  low = sink
    	ret	;=====----->>>>>
    ;
    ;===================================================================================
    ; Interrupt-Service-Routine
    ;===================================================================================
    ;
    ;===================================================================================
    ; Ende des Quellcodes
    ;===================================================================================
    .. da geht die Leuchte an - und bleibt es auch.
    Ciao sagt der JoeamBerg

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Dieser Code läuft bei mir:
    Code:
    /*
    ===========================================================
    Aufgabe:
    
    Sende "Hallo Welt" über die RS232   UND
    LED auf PB2 anzünden
    
    Autor: JWT
    ===========================================================
    */
    
    #include <stdlib.h>
    #include <avr/io.h>
    /*   #include <avr/iotn2313.h>     <<< das is ja wohl nix   */
    
    //#define MCU = attiny2313
    
    //   ### NEIN ### Mit Quarz 16 Mhz-CPU
    //   Interner Oszillator, 8 MHz
    #define F_CPU  8000000
    #define BAUD 9600 
    #define UBRR (unsigned int)(F_CPU / BAUD / 16 - 0.5)
    
    
    //   ### Portinitialisierung und waitms aus RNContr Demo C
    
    //   *### Ports setzen ###
    //   Ports auf HIGH/LOW setzen
    
    static inline void setportbon(const uint8_t n)
    {PORTB |= (1<<n);}   //set PORTB.n high
    static inline void setportboff(const uint8_t n)
    {PORTB &= ~(1<<n);}   //set PORTB.n low
    
    /*### Programm pausieren lassen ###*/
    /*Pausenwert ist nur experimentell !*/
    
    void waitms(uint16_t ms)
    {
       for(; ms>0; ms--)
       {
          uint16_t __c = 4000;
          __asm__ volatile (
             "1: sbiw %0,1" "\n\t"
             "brne 1b"
             : "=w" (__c)
             : "0" (__c)
          );
       }
    }
    
    
    
    // ------------------------------------------------------------------
    //   Dieser Codeschnipsel ähnlich 2313-doc, S 121
    
    void USART_Init( unsigned int baud )
    
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable receiver and transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 2stop bit */
    UCSRC = (3<<UCSZ0);
    }
    
    // ------------------------------------------------------------------
    void sendchar(unsigned char c)
    {
       while(!(UCSRA & (1<<UDRE))) //Warten, bis Senden möglich ist
       {
       }
       
       UDR = c; //schreibt das Zeichen aus 'c' auf die Schnittstelle
    }
    
    // ------------------------------------------------------------------
    void sendUSART(char *s) //*s funktiniert wie eine Art Array - auch bei
             // einem String werden die Zeichen (char)
             // einzeln ausgelesen - und auf die
             // Sendeschnittstelle übertragen
    {
       while(*s)
       {
       sendchar(*s);
       s++;
       }
    }
    
    // ------------------------------------------------------------------
    /*### Hauptschleife ###*/
    int main(void)
    {
      USART_Init(UBRR);      //USART initialisieren
      DDRB=0xff;
    //   for(uint8_t i=0; i<10; i++)
    
    for(;;){
       
       setportboff(2);
       waitms(150);
       setportbon(2);
       
    
    
    
     
    
       /*###Text senden###*/
    
       sendUSART("\r\n\n\n"); //Sendet Kenung und Text.
                // "\r" setze Cursor auf Zeilenanfang,
                // "\n" beginnt dann die nächste Zeile
       sendUSART("**** ATtiny2313 *****\r\n");
       sendUSART(" \r\n");
       sendUSART("Hallo, Welt.\r\n");
       sendUSART(" \r\n");
    } 
    }
    Wie schon erwähnt PORTB als Ausgang definieren und den UART richtig einstellen, du hast die Baudrate in den UBRRL und H geschrieben.

    Edit: Ich habe auf 1Stopbit geändert

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Erstmal vielen Dank. Ich "muss noch was tun" - und gehe es später ausprobieren, korrigieren und Fehlerdiskussion

    Danke
    Ciao sagt der JoeamBerg

  6. #16
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Hallo Hubert.G, hei robocat,

    nochmals vielen Dank, Euch beiden. Ich habe den Code von Hubert.G 1:1 übernommen: Die LED blinkt - das Hyperterminal zeigt GARNIX an - der RS232-Monitor in DASYLab (ein kleiner Verwandter von LabView) zeigt folgenden Text:

    Aufgenommen mit einem RS232-Monitor (DASYLab)

    <LF>**** ÁÔôiny2313 ****ªŠ€Š¨±¼ï Welt.<CR><LF>
    <CR><LF>
    <CR><LF>

    <LF>
    <LF>**** ATôiþ<CR><LF>

    <LF>
    <LF>**** ATtiny2313 *****Š ŠÈallo, Welt.<CR><LF>
    <CR><LF>

    andere Sequenz (später) bei gleicher Hardware

    <LF>
    <LF>**** ÁÔ´éîy2313 ****ªŠ‚¤±´´•”§µ´¼ž…†‡‚<CR><LF>

    <LF>
    <LF>**** Á”´©®¹2³13 *****Š‚¤±´•”§µ´¼–…„Cá<CR><LF>

    <LF>
    <LF>**** Á”´©®ù2313 *****ŠŠ ±´¼¿œ€—¥ô®Š…Š<CR><LF>

    <LF>
    <LF>**** ATôiny2313 *****þ

    Da ich als elektro(schaltungs)technisches Wickelkind die ganze Schaltung mit dem MAX232 selbst aufgebaut habe (angelehnt an hiesige Threads und RN-Control) könnte es an der Elektronik liegen. Der Oskar (leider kein DSO ) zeigt bei der RN-Control +/- 8V an, bei meinem Oevre -9V und zwei positive "Spuren" irgendwo in der Nähe von +3 bzw +8 V (siehe Bild).

    Nach Umlöten des Elko von max232_2 nach Vcc kam dann das:

    Š
    **** ATôiny2313 *****

    Hallo, Welt.

    ¹

    

    aber nur ein Mal.

    Nun sind die Schaltvorschläge zum max232 natürlich nicht eindeutig. Das Beispiel https://www.roboternetz.de/wissen/im...schaltplan.gif
    zeigt mir beim max232_2 einen Elko der mit dem (-)-Anschluss nach Vcc geht ?? Die Bestückung an 1, 2, 3, 4, 5 und 6 sieht 4,7 müF vor. Dagegen sind bei den Thread von pmaler, bzw. bei http://www.pherzog.de/streifenrastermega32/ am max232 22 müF gesetzt, der max232_2 geht mit (+) nach Vcc. Ich hatte mich an der Streifenrasterplatine orientiert, meine Bauteile sind nach dieser Stückliste. Das Datenblatt zu dem von mir verwendeten MAX 232 CPE http://www.reichelt.de/?;ACTION=7;LA...5caa274be49a9d sieht aber andere Kapazitäten vor .

    Mein Signalausgang am 2313 sieht recht gut aus, sauber zwischen 0V und +5V. Dieses Spannungsplateau bei +3V nach dem max232 sollte also irgendwo zwischen 2313 und RS232-Stecker passieren . Der Oskar zeigt die Pegel bei der RN-Control sauber und eindeutig zwischen -8V und +8V.

    Ich muss mir die Hardware mal durch den Kopf gehen lassen.

    Das Dümmste ist, dass ich mir diese Schnittstelle für die Erprobung von Teilprojekten in den Kopf gesetzt hatte - später sollte ich dann I2C nehmen (dann gibts wohl neue Probleme).
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken klein80_img_1395.jpg  
    Ciao sagt der JoeamBerg

  7. #17
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    hi joe,
    der elko an pin 2 vom max muss mit (-) an die 5V versorgung. und der an pin 6 mit (+) auf masse. das liegt daran, dass -10V gegenüber 0V negativer sind, und die 5V negativer als +10V. im zweifelsfall ins datenblatt gucken http://www.ortodoxism.ro/datasheets/...220-MAX249.pdf. die elkos sind normalerweise nicht kritisch, bei mir hat bisher alles zwischen 1µF und 4,7µF klaglos dienst getan.

    windows verwendet normal \r\n als zeilenumbruch, manche programme (dasylab?) wollen aber nur ein \n.

    gruesse von der katz

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Hast du im Hyperterminal auf 1Stopbit geändert, sonst kann noch sein das die Frequenz den internen Oszillator nicht stimmt. Die ist etwas Spannungs- und Temperaturabhängig.
    Bei mir läuft es auch im Hyperterminal einwandfrei.
    Ob diese beiden Elkos gegen + oder - geschalten sind ist egal solange die Spannungsfestigkeit stimmt.

  9. #19
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Schönen Abend, Hubert.G

    Zitat Zitat von Hubert.G
    ... auf 1Stopbit geändert ...
    Ja, 1, 1 1/2 und 2. Was man halt so tut, wenn man nix Genaues nicht weiss.

    Zitat Zitat von Hubert.G
    ... das die Frequenz den internen Oszillator nicht stimmt ...
    Da bin ich grad dran. Bei meinem tiny13 hatte ich mit einer (Assembler-) Soft-RS232 mit dem internen Oszillator GELEGENTLICH mal einen Treffer . Aber ich hab die Sachen zusammengesucht und löte mir die notwendigen Kondensatoren rein und stecke einen Quarz dazu. Steht sowieso auf der Liste.

    Zitat Zitat von Hubert.G
    ... Ob diese beiden Elkos gegen + oder - geschalten sind ist egal solange die Spannungsfestigkeit stimmt.
    Ohhh - danke.
    Ciao sagt der JoeamBerg

  10. #20
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Nachtrag zu den Elkos, die Polarität gehört natürlich schon eingehalten, die ändert sich nicht.
    Mit den Kapazitäten von 4µ7 bist du bei einem MAX232 gut dabei. Meist genügt 1µ oder sogar 0,1µ, da ist allerdings ein Blick ins Datenblatt angesagt und dabei genau auf die Bezeichnung achten.

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test