- 3D-Druck Einstieg und Tipps         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 51

Thema: einige Fragen zu Grundlagen der C-Programmierung

  1. #31
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Anzeige

    Praxistest und DIY Projekte
    Welche Platine benutzt Du denn?

  2. #32
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    rnbfra 1.1 mit atmega 32 von robotikhardware.de.
    Mir ist aber noch was komisches aufgefallen: Wie gesagt minicom funktioniert, wenn ich RX mit TX verbinde. Wenn ich den Stecker an meinen Controller anschließe kommen nur kryptische Zeichen zurück wenn ich was hinsende, dh. manchmal sind es komische Zeichen, manchmal aber auch das richtige Zeichen. Eigentlich sollte doch er doch auf das Senden von Zeichen überhaupt nicht reagieren oder? Das verstehe ich nicht!

  3. #33
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    manchmal sind es komische Zeichen
    Hast Du die Baudrate am µC auch richtig eingestellt ?
    Komische Zeichen haben meistens was mit der falsch eingestellten Baudrate zutun.
    Hast Du ein Quarz dran oder nur den internen Takt?
    Beim internen Takt klappt es eventuell auch nicht immer...

    Gruß Sebastian

  4. #34
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Also die Baudrate ist im Programm-Code festgelegt. Hier nochmal der Code zur Erinnerung:
    Code:
     #include <avr/io.h>
    #include <avr/sfr_defs.h>
       
       
    //Einige Makros zur Berechnung des Baud-Raten Registers
    #define F_CPU         8000000 // 8MHz Taktfrequenz
    #define BAUD_RATE      9600   // gewünschte Baud-Rate für UART
    #define BAUD_SELECT    (F_CPU/(BAUD_RATE*16l)-1) //Berechnungsformel für das Baud-Raten Register
       
    //Diese Funktion sendet ein einzelnes Zeichen an die UART   
    void uart_putchar(char c)
    {   
       //warte, bis das Bit UDRE im Register UCSRA gesetzt ist.    
       //Dieses Bit wird vom Prozessor gesetzt, wenn das Senderegister leer ist
       loop_until_bit_is_set(UCSRA, UDRE);
       //Übergebenes Zeichen ins Senderegister UDR legen.
       //Die Daten werden jetzt an die UART geschickt.
       UDR = c;   
    }
    
    
    int main (void)
    {
       //Zuerst muss die UART initialisiert werden
       
       //Hier wird der Sender der UART aktiviert.
       //Der Empfänger und die Interrupts bleiben in diesem Beispiel aus
       UCSRB = 0x08;
       
       //Jetzt muss noch die Baudrate eingestellt werden.
       //Wir weisen dem Register einfach das Makro von oben zu.
       UBRRL = BAUD_SELECT;
       
       //Jetzt kommt die Hauptschleife
       //Es wird immer das gleiche Zeichen (x) an die UART ausgegeben
       while(1)
       {
          uart_putchar('x');
       }
       return 1;
    }
    Mit Quarzen kenn ich mich überhaupt nicht aus. Ich nehm aber mal an, dass es dieses silberne kleine Kästchen direkt neben dem Prozessor ist, da neben dem CoController auch nochmal sowas ist. (kling logisch, ein Quarz für jeden Prozessor) Mal abgesehen davon steht auf dem neben dem MainController 8.000 Mhz, auf dem anderen 4.000 Mhz.

    mfg
    jagdfalke

  5. #35
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    48
    Beiträge
    1.146
    Auf das Senden von Zeichen sollte er in der Tat nicht reagieren, das hört sich etwas seltsam an. Du hast nicht zufällig ein Oszilloskop zur Verfügung?

    Ich tippe aber auch mal auf eine nicht richtig eingestellte Baudrate.
    Hast Du die Fuses auf den externen Quarz eingestellt?

    askazo

  6. #36
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Bitte was? Fuses? Ich war froh, dass ich in Bascom nie Fusebits einstellen musste. Keine Ahnung wie ich das mit Linux und C mache :S

    Ich hab hier so ein script:
    Code:
    #!/bin/sh 
    prg="adude"
    #
    help()
    {
    	echo "prg_fusebit_uc -- read and write fuse bits of the atmega8"
    	echo ""
    	echo "Usage: prg_fusebit_uc [-hu] -r|-w Freq"
    	echo ""
    	echo "OPTIONS: -h this help"
    	echo "         -r read fuse bytes"
    	echo "         -u use uisp instead of avrdude"
    	echo "            avrdude can automatically detect dapa or avrusb500."
    	echo "            uisp can only be used with the parallel port dapa."
    	echo "         -w write fuse bytes such that a given Freq is used"
    	echo "            a frequency of 0 means external crystal. Possible"
    	echo "            values are 0,1,2,4,8"
    	echo ""
    	echo "EXAMPLE: program the fuses to 4MHz internal"
    	echo "         prg_fusebit_uc -w 4"
    	echo ""
    	echo "Warning: you can not undo the setting \"external crystal\" unless"
    	echo "         you have a crystal that works."
    	echo "This script can be easily adapted to different Programmer types"
    	exit 0
    }
    while [ -n "$1" ]; do
    case $1 in
        -h) help;shift 1;;
        -u) prg="uisp";shift 1;;
        -r) opt_r="1";shift 1;;
        -w) opt_w="1";freq="$2";shift 2;;
        -*) echo "error: no such option $1. -h for help";exit 1;;
        *)  break;;
    esac
    done
    
    if [ -z "$opt_r" -a  -z "$opt_w" ];then
    	# one of those options is mandatory
    	help
    fi
    
    hf=0xd9
    if [ "$opt_w" = "1" ]; then
    	case $freq in
    	    0) lf=0xee;echo "Make sure you have a crystal otherwise you can not change this!";sleep 2;;
    	    1) lf=0xe1;;
    	    2) lf=0xe2;;
    	    4) lf=0xe3;;
    	    8) lf=0xe4;;
    	    *) echo "error: no such frequency, -h for help";exit 1;;
    	esac
    fi
    
    
    if [ "$prg" = "uisp" ]; then
    	if [ "$opt_r" = "1" ];then
    		set -x
    		uisp -dlpt=/dev/parport0 -dprog=dapa --rd_fuses
    		set +x
    		echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
    		echo "             0xe4 (8MHz intern)"
    		echo "             Fuse High Byte should be 0xd9"
    		exit 0
    	fi
    	if [ "$opt_w" = "1" ]; then
    		set -x
    		uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_l=$lf
    		uisp -dlpt=/dev/parport0 -dprog=dapa --wr_fuse_h=$hf
    		set +x
    		exit 0
    	fi
    
    fi
    if [ "$prg" = "adude" ]; then
    	if grep "Vendor=0403 ProdID=6001" /proc/bus/usb/devices > /dev/null ; then
    		prg="avrusb500"
    	else
    		prg="dapa"
    	fi
    	if [ "$opt_r" = "1" ];then
    		set -x
    		avrdude -p m8 -c $prg -v -q
    		set +x
    		echo "Explanation: Fuse Low Byte: 0xe1 (1MHz intern), 0xe3 (4MHz intern), "
    		echo "             0xe4 (8MHz intern)"
    		echo "             Fuse High Byte should be 0xd9"
    		exit 0
    	fi
    	if [ "$opt_w" = "1" ]; then
    		set -x
    		avrdude -p m8 -c $prg -u -v -U lfuse:w:$lf:m
    		avrdude -p m8 -c $prg -u -v -U hfuse:w:$hf:m
    		set +x
    		exit 0
    	fi
    fi
    hilft das irgendwie?

  7. #37
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    So kommen wir nicht weiter.....

    Unter Windows ist das Board richtig gelaufen?
    Hast Du mit Bascom programmiert ?
    Hast Du irgendwie eine hex Datei, die 100 % geht ?
    Z.B. irgendwas, was Du mit Bascom erstellt hast ?
    mach die mal rein und guck, ob es klappt,
    wenn nicht kann ich Dir was posten, dann versuchst Du es damit.

    naja und nochwas hast Du RX vom PC mit TX und TX vom PC mit RX vom µC verbunden, aber wenn es unter Windows geklappt hat, wird es wohl so sein...

    Gruß Sebastian

  8. #38
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Ja Kabel ist richtig verbunden. Ich leider keinerlei überbleibsel aus der Bascom-Zeit (liegt schon ziemlich lange zurück). Wäre nett, wenn du mir was posten könntest.

  9. #39
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo ich habe eine eine Datei angehängt, entferne das .txt, dann kannst Du sie normal "enttaren".

    Das muß klappen, habe gerade auf meinem STK500 ausprobiert...

    EDIT:

    UPS, Du hast doch Mega32 , oder ?
    Wenn ja editiere Makefile und ersetze
    MCU = atmega16

    in

    MCU = atmega32

    danach nochmal make

    Ich hatte keinen Mega32 zur Hand, sondern einen 16 deswegen...
    Angehängte Dateien Angehängte Dateien

  10. #40
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Danke für die Mühe, es hat aber leider zu nichts geführt. Sobald RX und TX vom PC an TX und RX vom Controller hängen bekomm ich auf Tastenanschläge ein falsches Echo.

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad