Rauschgenerator



  • Hey Leute...!

    Ich bin im 6. Semester eines Physikstudiums und muss eine Aufgabe zum Thema Programmieren lösen! Die Vorlesung unseres Profs war eher schlecht und er ist auch nicht bereit uns auf Nachfrage irgendetwas erneut zu erklären... wobei es bei ihm auch nicht viel bringen würde...! Ich muss ehrlich gestehen, dass ich sehr wenig ahnung von programmieren habe! ich habe versucht zumindest die Grundlagen über Bücher, Internet und Foren zu erlangen, doch die Aufgabe übersteigt meine Kenntnisse deutlich.

    Das Fach nennt sich Programmieren von Microprozessoren und wir arbeiten mit Visual Studio und dem Altium Designer.

    Wir haben zu der Aufgabe zwar schonmal etwas in der Art gemacht... aber nur in Assembler...!

    So wie ich es verstehe sollen wir es nun in C programmieren.

    Nun ist das Forum hier meine letzte Hoffnung...!

    Hier die gestellte Aufgabe...vielleicht hat ja jemand eine Ahnung...!

    Aufgabenstellung:

    Rauschgenerator:

    Es ist ein PRBS - Signal (32 - stufiges Register) zu erzeugen
    und die untersten 8 bit des Schieberegisters werden für die
    Digital - Analog - Daten - Ausgabe genutzt.

    Ich würde mich sehr freuen wenn mir jemand helfen könnte...



  • Was hast du schon selbst gemacht? Wenn du eine konkrete Frage hast dann kannst du sie hier stellen, aber Hausaufgaben fertig lösen lassen wollen ist hier eher ungern gesehn.



  • Die entsprechenden Funktionen müssten dann schon in Assembler vorliegen, mit Standard-C hat das nichts zu tun!



  • Die Forensuch spuckt bei PRBS auch nur diesen Thread aus.
    Aber ein PRBS kann (laut Wikipedia) durch ein Linear rückgekoppeltes Schieberegister (LFSR) gemacht werden kann.

    Und bei LFSR ist sogar die Forensuche erfolgreich.
    Bitteschön: http://www.c-plusplus.net/forum/264427?highlight=lfsr



  • Ok danke schonmal für den anfang...! also ich habe die Hardware in Altium schon aufgebaut und ein programm in assemlber haben wir mal geschrieben... aber ob das nun dazu zu verwenden ist und ob es dann auch 32 - stufig ist habe ich keine ahnung...! zudem kommt dann noch dazu wie ich sowas mit dem PRBS - Signal kopple...!
    wie ihr bestimmt merkt habe ich nicht soviel ahnung... aber ich wusste nun auch nicht wo ich mir sonst hilfe holen soll... will ja auch nicht das mir das einfach einer von euch fertig schreibt oder so einen quatsch, aber ich würde vielleicht ein paar denkanstöße bekommen... das dann noch zu verstehen, selbst wenn ich das fertige programm vor mir hätte wäre für mich bestimmt schon schwer...:/

    Hier ansonsten das was wir schon gemacht haben... nur was ich da noch ändern muss damit es zu der aufgabenstellung passt...keine ahnung

    .define call		'bgezal $0,'
    .define ret		'jr $ra'	;Return
    
    ;**************************************************************
    ; TSK300 Special Function Registers - Coprocessor 0 [COP0]
    ;**************************************************************
    .define COP_Status	'$0'		;SFR-$0: Control/Status  (R/W)
    .define COP_IEnable	'$1'		;SFR-$1: Interrupt Enable (R/W)
    .define COP_IPending	'$2'		;SFR-$2: Interrupt Pending (R/W)
    .define COP_TBLO	'$3'		;SFR-$3: Time Base Low (R)
    .define COP_TBHI	'$4'		;SFR-$4: Time Base High (R)
    .define COP_PIT		'$5'		;SFR-$5: Programmable Interval Timer Limit (R/W)
    
    .define COP_Debug	'$6'		;SFR-$6: Debug Data
    .define COP_ER		'$7'		;SFR-$7: Exception Retunr (R/W)
    .define COP_EB		'$8'		;SFR-$8: Exception Base (R/W)
    .define IMode		'$9'		;SFR-$9: Interrupt Event Mode (R/W)
    
    ;**************************************************************
    ; TSK300 Status Register Bit Functions - STATUS.x
    ;**************************************************************
    SRBF_InterruptEnable		.equ	0x0001
    SRBF_InterruptDisable		.equ	0xFFFE
    SRBF_IntervalTimerReset		.equ	0x0080
    SRBF_IntervalTimerEnable	.equ	0x0100
    SRBF_VectorModeEnable		.equ	0x0200
    
    ;**************************************************************
    
    PRTIO		.equ 0xFF000000		;Basisadresse von PRTIO
    COUNTER		.equ 0x1000		;Speicheradresse von COUNTER
    STACK		.equ 0x1F00		;STACK-Anfangsadresse
    
    		.GLOBAL		_START
    		.SECTION	.text.abs., at(0x00000000)
    		.ALIGN		4
    		.EXTERN 	reset_timer_interval		
    
    _START:		nop
    		la	$sp, STACK	;Stackpointer zeigt auf STACK
    
    		la	$a0, PRTIO	;Adressregister $a0 zeigt auf PRTIO
    
    		la	$a1, COUNTER	;Adressregister $a1 zeigt auf COUNTER
    		li	$v0, 0		;Counter = 1
    		sw	$vo, 0($a1)	;Save COUNTER
    
    		call	INIT		;Initialisiere MIPS3000 (Unterprogramm)
    
    LOOP:		nop			;Endlosschleife
    		j	LOOP
    
    ;**************************************************************
    ; Initialisierung
    ;**************************************************************
    
    INIT:		mfc0	$v1, COP_Status				;aktuellen Status einlesen (move from Coprozessor: Status->$v1)
    		andi	$v1, $v1, SRBF_InterruptDisable		;Disable Interrupts
    		mtc0	$v1, COP_Status				;========================= (move to Coprozessor)
    
    		li	$v1, ISR				;ISR(Interrupt Service Routine) Adresse -> $v1
    		mtc0	$v1, COP_EB				;Exception Base -> ISR
    								;=========================
    
    		li	$v1, 0x00000001				;Enable Interrupt 1
    		mtc0	$v1, COP_IEnable			;=========================
    
    		mfc0	$v1, COP_Status				;aktueller Status einlesen
    		qri	$v1, $v1, SRBF_VectorModeEnable		;Set Vector Interrupts
    		mtc0	$v1, COP_Status				;=========================
    
    		li	$v1, 50 * 1000 * 200			;Set Timer Interval
    		mtc0	$v1; COP_PIT				;=========================
    
    		mfc0	$v1, COP_Status				;aktuellen Status einlesen
    		ori	$v1, $v1, SRBF_InterruptEnable		;Enable Interrupts
    		mtc0	$v1, COP_Status				;=========================
    
    		mfc0	$v1, COP_Status				;aktuellen Status einlesen
    		ori	$v1, $v1, SRBF_IntervalTimerEnable	;Enable Timer Interval
    		mtc0	$v1, COP_Status				;=========================
    
    		ret						;Return
    
    ;**************************************************************
    ; Interrupt-Service-Routine
    ;**************************************************************
    
    ISR:		addiu	$sp, $sp, -4			;Rückkehradresse
    		sw	$ra, 0($sp)			;retten ($ra: Rückkehradressenregister)
    
    		jal	reset_timer_interval
    
    		lw	$v0, 0($a1)			;Load COUNTER
    		sb	$v0, 0($a0)			;COUNTER -> LEDs
    		addi	$v0, $v0, 1			;COUNTER inkrementieren (COUNTER = COUNTER + 1)
    		sw	$v0, 0($a1)			;Save COUNTER
    
    		lw	$ra, 0($sp)			;Rückkehradresse wiederherstellen
    		addiu	$sp, $sp, 4			;herstellen -> $ra (Stackpointer wieder auf den Anfang setzen)
    		rfe					;Return from Exception
    
    ;**************************************************************
    
    		.endsec
    		.end
    


  • Sollt ihr folgende Info nutzen?
    http://wiki.altium.com/display/ADOH/Introduction+to+C-to-Hardware+Compilation+Technology+in+Altium+Designer

    Wenn du deinen Quellcode, der nicht C oder C++ ist, einfach mit der Maus markierst und dann unter dem Editerfeld auf den [Code] - Button klickst sieht dein letzter Beitrag übersichtlicher aus.

    Keine Ahnung was ein TSK 300 bei euch im Labor ist und ob du den Code nutzen kannst 😕

    MfG f.-th.



  • TSK 300 ist der Processor...!

    Tja also wir benutzen genau das programm... aber in einem solchen plan hat er uns das nicht erklärt... eigentlich versteht man bei unsrem prof nur bahnhof und er denkt wir haben schon 10 jahre berufserfahrung im programmieren obwohl unsere kenntnisse gegen null gehen...! 😞
    mist!!!



  • http://www.mikrocontroller.net/topic/158086
    ( hier aufgeführt auch noch:
    http://en.wikipedia.org/wiki/Linear_feedback_shift_register )
    http://www.scheidig.de/Deutsch/Projekte/Rauschgenerator/PrbsGenerator.htm
    http://www.doepfer.de/a117.htm
    http://www.loetstelle.net/projekte/tiny13rng/tiny13rng.php
    http://www.maxim-ic.com/app-notes/index.mvp/id/1743/CMP/WP-9
    http://www.lrr.in.tum.de/~jasmin/index.html
    http://www.armory.com/~rstevew/Public/Tutor/Debug/debug-manual.html
    http://134.108.191.1/vorl/rt2/debug.pdf
    http://www.proggen.org/doku.php?id=project:wordcount
    http://de.wikibooks.org/wiki/Assembler_(80x86_Prozessor)-Programmierung:_Rechnen_mit_dem_Assembler
    http://www.df.lth.se/~john_e/gems.html
    http://www.tonmeister.de/symposium/2009/np_pdf/B21.pdf

    möglicherweise helfen diese Links weiter. Programmierpraxis in 10min oder 21Tagen kann aber keiner wirklich bieten, da helfen eher Begeisterung, gute Texte, gute Bücher, Bibliotheken, Compiler, Debugger usw. und natürlich Arbeitseinsatz.

    (man braucht noch das ein oder andere Buch, braucht aber etwas Zeit:
    http://www.amazon.de/Programmieren-C-Reference-Manual-deutscher-Sprache/dp/3446154973/
    http://www.amazon.de/Hacking-Die-Kunst-Exploits-mit/dp/3898645363/
    und noch vielleicht sowas hier:
    http://www.amazon.de/AVR-Mikrocontroller-programmieren-Selbstbauprojekte-ATtiny13-ATmega32/dp/3645650199/
    http://www.netzmafia.de/skripten/hardware/index.html
    http://mirror.lihnidos.org/GNU/savannah/pgubook/ProgrammingGroundUp-1-0-booksize.pdf

    Grundsätzlich ist so ein Rauschgeneratorgerät ziemlich praktisch für Physiker, oder?



  • Vielen dank... das ist doch schonmal was...! 😃 einsatz ist ja sowieso im studium gefragt, aber ohne kenntnisse soetwas in einem semester programmieren zu können... ich weiss nicht ob das so ohne weiteres zu mahcen ist...! es kommen ja auch noch 6 - 7 andere Fächer dazu die etwas zeit in anspruch nehmen...!

    aber jetzt habe ich ja erstmal ein paar sachen zu lesen...!
    nochmals vielen dank...der sonntag ist gerettet...:D


Anmelden zum Antworten