-
        

Ergebnis 1 bis 4 von 4

Thema: Bascom-Programm in C-Programm übersetzen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2013
    Beiträge
    11

    Bascom-Programm in C-Programm übersetzen

    Anzeige

    Hallo!
    Mein Problem ist:
    Ich habe ein kleines Programm in Bascom erstellt. Das schaltet einen Mosfet abhängig von einer analogen Eingangsspannung ein, und zwar in einem Fenster von 120mV bis 250mV Dauer Ein, bei mehr oder weniger Spannung für eine Sekunde Ein/Aus.
    Der Timer erzeugt 75,2kHz, damit wird der Mosfet geschaltet.

    Dieses Programm läuft auf einem Attiny13 tadellos.
    Um die Sache noch zu verkleinern, möchte ich einen Attiny 10 verwenden.
    Das Programm hat nur 272 Bytes, braucht einen Timer und einen analogen Eingang, der interne Oszillator ist genau genug dafür.

    Da der Tiny10 aber von Bascom nicht unterstützt wird, brauche ich das ganze in C (kann ich nicht).

    Hier das Programm:

    $regfile = "attiny13.dat"
    $crystal = 9600000 'intern
    $hwstack = 22
    $swstack = 24
    $framesize = 16

    Config Portb.1 = Output ' zum Mosfet
    Config Portb.3 = Input ' B.3 = Analog-Eingang
    Dim Result As Integer

    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Do
    Result = Getadc(3)
    If Result > 120 And Result < 250 Then 'Ein bei 0,12V, Aus bei 0,25V
    Gosub Timer_on
    Else
    Gosub Timer_off
    Wait 1 '= Auszeit
    Gosub Timer_on
    End If
    Wait 1 '= Einzeit
    Loop
    End

    Timer_on:
    Tccr0a = 66 'hex: 42 Set COM0A1:0 = 0 , 1; Set WGM1:0 = 1 , 0
    Ocr0a = 64 'hex:40 Timerstartwert für 75,2kHz
    Tccr0b = 9 'hex: 09 Start Timer, Prescaling = 1, WGM02 = 1
    Return
    Timer_off:
    Tccr0a = 2 'hex: 02 COM0A auf 0 gesetzt!
    Return

    Programmer hab ich (myAVR Smart USB MK3), auch schon anderes mit programmiert, sollte also kein Problem sein.

    Die Registerklimmzüge mußte ich machen, weil der Ausgang bei Timer Aus nicht definiert Low Pegel hat.
    Ich Bin dankbar für jede Hilfe. Joachim

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Hatte gerade etwas Langeweile. Habe aber den Prescaler nicht und eine interne Referenzspannung scheint es beim tiny10 nicht zu geben.
    Habe es auch nicht getestet oder sonstige Änderungen vorgenommen, nur 1:1 in C.

    Code:
    /*
     *
     */ 
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    
    
    void Init(void);
    uint8_t Read_Adc(uint8_t channel);
    void TimerOn(void);
    void TimerOff(void);
    
    
    
    
    int main(void) {
    	uint8_t ret = 0;
    	
    	Init();
    	
    	while(1) {
    		ret = Read_Adc(3);
    		
    		if(ret > 120 && ret < 250) {
    			TimerOn();
    		} else {
    			TimerOff();
    			_delay_ms(1000);
    			
    			TimerOn();
    		}
    		_delay_ms(1000);
    	}
    	
    	return 0;
    }
    
    
    
    
    void Init(void) {
    	// PB1 out
    	DDRB |= (1<<PB3);
    	
    	// Enable ADC
    	ADCSRA |= (1<<ADEN);
    	
    	// Prescaler ?
    	ADCSRA |= (1<<) | (1<<);
    	
    	// no internal ref on tiny10
    }
    
    
    uint8_t Read_Adc(uint8_t channel) {
    	ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
    	ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    	while(ADCSRA & (1<<ADSC));    // auf Abschluss der Konvertierung warten
    	
    	return ADCL;
    }
    
    
    void TimerOn(void) {
    	TCCR0A = 0x42;
    	
    	TCCR0B = 0x09;
    	
    	OCR0A = 0x40;
    }
    
    
    void TimerOff(void) {
    	TCCR0A = 0x02;
    }
    mfg

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.10.2013
    Beiträge
    11
    Ich danke Dir!
    Da muß ich wohl doch noch einiges ändern...
    Die Referenz ist nicht kritisch, es wird einfach Vcc benutzt. Aber der Timer im Tiny10 ist 16 Bit, im Tiny13 nur 8 Bit. Einen Prescaler gibt es,
    aber nur /8,/64,/256 und /1024. Dafür ist der ADC nur 8 Bit, beim Tiny13 10 Bit. Das ist alles unkritisch, wichtig ist nur die Frequenz
    am Ausgang von ca. 75kHz, +/- 2kHz.
    Allerdings habe ich jetzt ein Grundgerüst auf dem ich aufbauen kann!
    Jetzt muß ich noch einen Compiler suchen, der den Tiny10 kann.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Zitat Zitat von joho63 Beitrag anzeigen
    Jetzt muß ich noch einen Compiler suchen, der den Tiny10 kann.
    Da bietet sich wohl das Atmel-Studio an...
    - Das Leben ist zu kurz, um in C zu programmieren -

Ähnliche Themen

  1. SD-Karte programm lässt sich nicht übersetzen - BASCOM-Bug?
    Von Bauteiltöter im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 18.04.2010, 17:33
  2. Hilfe: Programm übersetzen C -> BasCom
    Von samson2 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 22.02.2009, 17:22
  3. Hilfe: Programm übersetzen C -> BasCom [ Oszi Uhr ]
    Von tc-maxx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 19.02.2009, 19:18
  4. eigenes programm schreiben und übersetzen
    Von proevofreak im Forum Robby RP6
    Antworten: 7
    Letzter Beitrag: 10.02.2008, 14:32
  5. Programm in Visual Basic Programm einbetten
    Von Sven04 im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 18.09.2007, 00:27

Berechtigungen

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