- 12V Akku mit 280 Ah bauen         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 47

Thema: umsetzen für win-avr

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    Anzeige

    E-Bike
    hallo, ich möchte mit winavr ein experiment machen, natürlich mit deiner hilfe,
    weil ich in c "noch nicht" weiterkomme.
    für eine bildzeile braucht der strahl 0,000064 sec.
    für den rücklauf 0,000012 sec.
    bleiben für den sichtbaren strahl 0,000054 sec.
    ich möchte jetzt 10 zeilen schreiben, die bei 0,000020 anfangen
    und bei 0,000030 aufhören. in dieser zeit muss der pind5 mit 300ohm
    an die antenne geführt werden (hellgrau).
    von 0,000000 bis 0,000019 und von 0,000031 bis 0,000054 mit 1kohm
    mit pind4 an die antenne geführt werden(schwarz). normal müsste ungefähr in
    der mitte ein senkrechter (natürlich wahrscheinlich ein bisschen gezackt)
    von 10 zeilen länge ein hellgrauer balken zu sehen sein.
    könntest du mir das einmal schreiben, ich glaube diesen grundstock
    könnte man weiterentwickeln. wichtig ist , das man erst einmal begreift
    wie man den elektronenstrahl beeinflussen kann.
    hardware : atmega8 oder 16 mit 8mhz.
    mfg pebisoft

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, habe ich einen denkfehler gemacht?
    wie wird eigentlich die sync des elektronenstrahls
    zum AVR gesendet, oder andersherum, bei den jetzigen programmen,
    wo liegt die syncabtastung damit der AVR richtig anfangen pro zeile.
    oder ist es zufall wann der AVR senden muss (0,7v) für den hellgrauen punkt.
    mfg pebisoft

  3. #23
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Klar, minimalistisch fangen wir an, damit wir das in den Griff kriegen.
    Ich fang' mal an und schau, wieweit ich komm und stell das rein.
    Sync: Wie du richtig sagst, eine Zeile dauert von links nach rechts 64 uS.
    alle 64 uS gibts den Interrupt. Der zieht für 5 uS den Sync-Pin (5) runter.
    Das ist das Zeichen für den TV, mit einer neuen Zeile anzufangen.
    dann muß eine kurze (hab's jetzt nicht im Kopf) Pause sein (Schwarz-Schulter)
    Und dann werden die S/w Pixel rausgeschossen, was halt geht.
    Schnell->schmales Bild / langsam->breiter
    dann wartet das Programm auf den nächten 64uS Interrupt (sleep)

    Oben und unten am Bild werden die Sync-Signale umgedreht, das is für die Bildsynchronisation.

    Der Abstand Sync <> erster Bildpunkt is nicht so heikel, das kann man bei einem Monitor z.B. nachstellen (Bild mehr rechts/mehr links)
    ebenso wie Bild rauf/runter und auch die sichtbare Breite

    Das Beispiel ist halt für NTSC gemacht, die haben nur 525 Zeilen (wir haben 625), da müssen wir basteln, sonst läuft das Bild vertikal durch.

    Gut, ich fang mal an. mfg robert

  4. #24
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Soderla. Beta release 0.nix
    Ist noch für Mega32 , ich brauch erst das Sheet vom Mega8, daß ich mitreden kann
    Die Zeilen hab ich für PAL angepaßt
    theoretisch macht das programm nix als einen weißen Strich mittig (circa)

    Setz dir den Helm auf und ab die Post. bis morgen mfg robert
    (Ändere, was du magst, ich hab eh eine Kopie)
    Angehängte Dateien Angehängte Dateien

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, vielen dank für die hilfe.
    mfg pebisoft

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, der bildschirm ging von weiss auf schwarz innerhalb
    von 2sec. danach habe ich "case 160", "case 314", "case348" von
    oben nach unten neu gesetzt. das bild ist im album,persönliche galerie, pebisoft.
    mfg pebisoft

  7. #27
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Guten Morgen
    Du meinst die "select" in der Interruptroutine ?
    Das Bild ist, so wie es ist, stabil ?
    Scheint nicht ganz weiß zu sein, aber das ist kein Problem, müßt man sich die Addierschaltung anschauen.
    Ich fürcht' nur, der Balken ist für die Logik zu breit.
    Prüfung:
    lösch mal von den Zeilen
    PORTD |= 0x40; // white
    alle, bis auf eine, dann muß der Balken schmäler werden (ein Pixel) und man sieht, ob er auch wirklich innerhalb einer Zeile fertig wird.
    man hört, mfg robert

  8. #28
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, habe heute gerade gelesen, das das deutsche
    forschungswirken ins ausland verlagert wird.
    ich hoffe , das man mit diesem avr-projekt (video mit AVR 16/32)
    hier in deutschland wieder zeigt ,das es auch im inland
    noch ein knowhow gibt. es ist eine interessante sache wenn man die
    fernsehelektronik (bilddarstellung) mit einfachen mitteln (avr16/32)
    vermitteln kann. ich kann mich noch drab erinnern, das ich mir vor 25 jahren
    mal einen elektronkikasten gekauft habe (sau teuer) mit einer kleinen
    bildröhre um das darzustellen woran ihr gerade forscht. diese versuche waren damals
    noch sehr mickrig. was ihr heut macht ist eien tolle sache. man lernt c und gleichzeitig
    bekommt man einen sehr guten einblick in die bildübertragungs- und darstellungstechnik
    mit einem einfachen AVR16/32 für ca 6 euro.
    vielleicht könnt ihr damit einen neuen innovations-elektronik-kasten entwickeln.
    mfg pebisoft

  9. #29
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, die helligkeit des balken wird
    durch den widerstand bestimmt der vor dem antenneneingang liegt.
    die graustufen/schwarz/weiss werden von 0,3v bis 1v geregelt.
    je nachdem über welchen pin die daten geschickt werden kann man verschiedene
    grautöne erzeugen, es kommt auch auf die einstellung des fernsehers an.
    bei 0v bis 0,2v wird der elektrodenstrahl dunkel, für den rücklauf (sync-pin).
    ich habe jetzt mal alle herausgenommen (weiss/schwarz), trotzdem erscheint der balken
    unverändert.
    mfg pebisoft

    Code:
    //video gen 
    //D.5 is sync:1000 ohm + diode to 75 ohm resistor 
    //D.6 is video:330 ohm + diode to 75 ohm resistor 
    
    
    #include <inttypes.h>
    #include <stdio.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    // cycles = 63.625 * 8 Note NTSC is 63.55 
    // but this line duration makes each frame exactly 1/60 sec 
    // which is nice for keeping a realtime clock 
    
    #define lineTime 509	// Timer1 Match Value (8 MHz /1 --> 0.000000125 s/cyc 
    						//  * 509 --->   0,000063625 s 
    
    //#define ScreenTop 30	// first visible line
    //#define ScreenBot 230	// last visible line
    
    #define ScreenTop 100	// first BAR line
    #define ScreenBot 150	// last BAR line
    
    //NOTE that the first line of CHARs must be in registers! 
    char			syncON, syncOFF; 
    //char			v1, v2, v3, v4, v5, v6, v7, v8; 
    register unsigned char	v1 asm ("r3");
    register unsigned char	v2 asm ("r4");
    register unsigned char	v3 asm ("r5");
    register unsigned char	v4 asm ("r6");
    register unsigned char	v5 asm ("r7");
    register unsigned char	v6 asm ("r8");
    register unsigned char	v7 asm ("r9");
    register unsigned char	v8 asm ("r10");
    
    unsigned char	bMask; 
    int				i,LineCount, time; 
    char			screen[800], t, ts[10], temp; 
    
    
    // ---------------------------------------------------------------------
    //This is the sync generator. It MUST be entered from 
    //sleep mode to get accurate timing of the sync pulses 
    //At 8 MHz, all of the sync logic fits in the 5 uSec sync 
    //pulse 
    //interrupt [TIM1_COMPA] void t1_cmpA(void) 
    // ---------------------------------------------------------------------
    //SIGNAL (SIG_OVERFLOW1)
    SIGNAL (SIG_OUTPUT_COMPARE1A)
    { 
    	PORTD	=	syncON;		//start the Horizontal sync pulse 
    	TCNT0	=	0;			//count timer 0 at 1/usec 
    	LineCount++ ;			//update the curent scanline number 
    	switch (LineCount)
    	{
    //	case 295:				//inverted (Vertical) synch after line 247 NTSC
    	case 160:				//inverted (Vertical) synch after line 295 PAL
    		syncON	= 0b00100000; 
    		syncOFF = 0; 
    		break;
    //	case 299:				//back to regular sync after line 250  NTSC
    	case 314:				//back to regular sync after line 299  PAL
    		syncON	= 0; 
    		syncOFF = 0b00100000; 
    		break;
    //	case 313:				//start new frame after line 262 NTSC
    	case 348:				//start new frame after line 313 PAL
    		LineCount = 1; 
    		break;
    	default: break; 
    	}
    	PORTD = syncOFF;		// sync pulse 
    } 
    
    // ---------------------------------------------------------------------
    // set up the ports and timers  M A I N 
    // ---------------------------------------------------------------------
    int main(void) 
    { 
    //init timer 1 to generate sync 
    	OCR1A		= lineTime;	//One NTSC line (509)
    	TCCR1B		= 9;		//full speed; clear-on-match MEGA163
    	TCCR1A		= 0x00;		//turn off pwm and oc lines 
    	TIMSK		= 0x10;		//enable interrupt T1 cmp 
    
    //init ports 
    	DDRD		= 0xf0;		//video out and switches 
    							//D.5 is sync:1000 ohm + diode to 75 ohm resistor 
    							//D.6 is video:330 ohm + diode to 75 ohm resistor 
    
    //init timer 0 to 1/uSec	1 MHZ
    	TCCR0		= 2; 
    
    //initialize synch constants 
    	LineCount		= 1; 
    	syncON			= 0b00000000; 
    	syncOFF			= 0b00100000; 
    
    //init software timer 
    	t			= 0; 
    	time		= 0; 
    
    //enable sleep mode 
    	MCUCR		= 0b10000000; 
    //#asm ("sei"); 
    	sei(); 
    
    //The following loop executes once/video line during lines 
    //1-230, then does all of the frame } processing 
    	while(1) 
    	{ 
    
    // stall here until next line starts 
    // sleep enable; mode=idle 
    // use sleep to make entry into sync ISR uniform time 
    
    asm volatile ("sleep"); 
    
    		if ((LineCount < ScreenBot) && (LineCount > ScreenTop)) 
    		{ 
    
    //Balken zeichnen 
    			
    			
    		} 
    	} //while 
    	return(0);
    } //main
    mfg pebisoft

  10. #30
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Also das mit dem Timing müßen wir erstmal hinkriegen und das kriegen wir auch hin.
    Ich werd' mich, hoffentlich heute, hinsetzen und die ganze Sache mal labormäßig durchchecken. Ich mag's nicht, sinnlos an irgendwelchen Werten rumzuschrauben, ob's vielleicht besser oder schlechter wird und nicht wissen, warum.
    Ich selbst hab nur PIC 877 und mega32, aber ich denk' doch, daß es sich dann problemlos auf den Mega8/16 umsetzen läßt.
    bis dann , Pebi, mfg robert

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test