Hallo,
versuche grade bei dem oben genannten uC den ADC zum laufen zu bringen
leider funktioniert er nicht so wie ich will, er schreibt einfach keinen
Wert in den ADC10MEM0 speicher und setzt den ADC10SC nicht automatisch
zurück. Ich hoffe Ihr könnt meinen Denkfehler finden bzw. mir noch ein
paar Ratschläge geben. Angelegt ist VCC an P1.2.
// Includes
#include "msp430fr5739.h"
// Definitions
#define dv 0.0034765625
// Global Variables
unsigned int delay=0, status=0, i=0, cache=0, cache1=360;
double volt=0;
// Function Definitions#
void ADC_init();
void Clock_init();
// main
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
Clock_init();
ADC_init();
// BEAK_TRIG @ P3.0
P3DIR |= BIT0 ;
P3OUT |= BIT0 ; // Beak low
// Lamp Charge Time
TA0CCTL0 = CCIE ; // Enable Interrupt CCR0
TA0CCR0 = 65536-1 ; // 1/24MHz*65536= 0.00273066666
TA0CTL |= TASSEL_1 + MC_1 + TACLR ; // ACLK, up to CCR0, clear TA0R
// Delay
TA1CCTL0 = CCIE; // Enable Interrupt CCR0
TA1CCR0 = cache1-1; // delay start with 360 = 15us
TA1CTL |= TASSEL_1 + MC_1 + TACLR; // ACLK, up to CCR0, clear TA1R
__enable_interrupt();
P3OUT &=~ BIT0 ; // Beak high
for(;;)
{
}// wait for interrupt
}
// Function
// Clock initalisieren
void Clock_init()
{
PJSEL1 &= ~BIT4 ;
PJSEL0 |= BIT4 ;
CSCTL0_H = 0xA5 ; // Unlock register
CSCTL2 = SELM__XT1CLK + SELS__XT1CLK ; // XT1=SMCLK=MCLK
CSCTL4 = XTS + XT1DRIVE_3 ; // High Frequency
CSCTL3 = 0; // No Division
CSCTL5 &=~ XT1OFFG;
CSCTL0_H = 0x01; // Lock register
for(unsigned int i=0 ;i==60000; i++)
{
}
}
//ADC initialisieren
void ADC_init()
{
P1SEL1 |= BIT2 ;
P1SEL0 |= BIT2 ;
ADC10CTL0 = ADC10SHT_2 + ADC10ON ; // Sample and Hold cycles 16,
enable ADC
ADC10CTL1 = ADC10SSEL_3 ; // SMCLK
ADC10MCTL0 = ADC10INCH_2 ; // P1.2
}
// Interrupt Service Routine
// Lamp Charge Time
#pragma vector = TIMER0_A0_VECTOR
__interrupt void T0_CCR0_ISR()
{
if(++i==17);
{
i=0;
TA1CCTL0 |= CCIE; // start Delay Interrupt
P3OUT &=~ BIT0; // Beak high
}
}
// Delay
#pragma vector = TIMER1_A0_VECTOR
__interrupt void T1_CCR0_ISR()
{
while (ADC10CTL1 & ADC10BUSY); // coversion ?
ADC10CTL0 |= ADC10ENC + ADC10SC ;// start conversion
TA1CCTL0 &=~ CCIE; //Disable Delay Interrupt
P3OUT |= BIT0; // Beak low
if(ADC10MEM0>cache)
{
cache=ADC10MEM0;
switch(status)
{
case 0: delay = cache1;
cache1 += 2; // raise delay
TA1CCR0 = cache1-1;
break;
case 1: volt = cache*dv; // convert memory in volt
break;
}
}
if(cache1==482)//20us
{
TA1CCR0 = delay-1 ;
cache=0;
cache1=216;
status=1;
}
}
Jetzt kommt die bei Problemen mit MSP430-Peripherie übliche Standardfrage, ob Du Dir die zu der von Dir verwendeten Familie passenden Codebeispiele von TI angesehen hast ... Und diese Zeile solltest Du Dir auch noch mal ganz genau ansehen: > for(unsigned int i=0 ;i==60000; i++)
Habe mir schon Beispiele angesehen, finde aber, das es zu dieser Familie nicht viele gibt. (z.B bei noccy.com) Allerdings werde ich da nicht schlau draus die meisten Arbeiten mit dem ADC interrupt, den ich bei mir nicht verwende müsste ja auch ohne gehen.
Durch änderung der Zeile
> ADC10CTL1 = ADC10SSEL_3 + ADC10SHP ;
funktioniert es soweit.
Dragofolio schrieb: > Habe mir schon Beispiele angesehen, finde aber, das es zu dieser Familie > nicht viele gibt. (z.B bei noccy.com) Es geht nicht um irgendwelche Beispiele von irgendwo, sondern um die von TI höchstselbst.
Habe nochmal genau nach den TI-Beispielen geschaut. Wie der Zufall es so will waren es genau die gleichen Beispiele (der Autor hatte Sie bestimmt von TI hochgeladen). Vll stell ich mich auch nur blöd an bei der Programmierung, finde es aber mit dem G2231 irgendwie einfacher da hat es wenigstens funktioniert. Habe nähmlich schon das nächste Problem aber erstmal recherchieren. Ich bedanke mich schonmal für die Antworten, dass sich zumindestens jemand meinen Probleme annimmt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.