Wenn du dir die usbconfig.h durchliest, dann steht da drinnen das man die usbconfig_prototype.h verwenden soll.
In meiner Konfiguration habe ich diese in usbconfig.h umbenannt.
Wenn du dir die usbconfig.h durchliest, dann steht da drinnen das man die usbconfig_prototype.h verwenden soll.
In meiner Konfiguration habe ich diese in usbconfig.h umbenannt.
Nach einer neu Installation von AVR studio lief es habe es geschafft auf den chip zu brennen, jetzt ist die hälfte erledigt und jetzt ist die PC seite dran.
Danke Leute für die Hilfe.
So nach dem dem ganzen streß läuft es auch nur fasst, Daten kommen vom dem PC auch an. Da wollte ich mich jetzt an den Internen AD-Wandler heran wagen,
am PC bekomme ich 1023 also 10-bit was ja eigentlich richtig ist.
Nur der wert ändert sich nicht wenn ich nochmal den Befehl schicke zum lesen.
Hier mal der Auszug, weil der Rest läuft ja.
Danke für die TippsCode:uint16_t adc_Value = 0; uchar Buffer[11]; void adc_init(void) { //ReferenzSpannung AVcc | Kanal 0 ADC0(PC0) //ADC enable| Singel Mode| Frequenzvorteiler F_CPU/128 uint16_t result; ADMUX = (1<<REFS0); ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ) {} result = ADCW; } /*ADC-channel-Funktion*/ uint16_t ADC_Read( uint8_t channel ) { ADMUX = (ADMUX & ~(0b00001111)) | (channel & 0b00001111); ADCSRA |= (1<<ADSC); while (ADCSRA & (1<<ADSC) ) {} return ADCW; } case USB_ADC: adc_Value = ADC_Read(0); itoa(ADCW, Buffer, 10); usbMsgPtr = Buffer; return sizeof(Buffer);
MfG exkluski
Welchen µC verwendest du ? Die neueren haben eine interne 1,1 V Referenz.
Des Weiteren würde ich den ADC per IRQ betreiben und den Wert nach jeder Messung in einer globalen uint16 Variable (hast du ja schon) speichern. Wenn vom PC die Anfrage kommt, wird diese nur mit dem Inhalt der Variable beantwortet und nicht eine separate Messung gestartet.
itoa brauchst du im Übrigen gar nicht. Es reicht doch das obere und das untere Byte zu senden und beide am PC zusammen zu bauen.
Geändert von ePyx (21.02.2012 um 15:48 Uhr)
Grüße,
Daniel
Ich nutzte den Atmega8 mit 12 MHz Quarz und einem Poti.
ein adc Interrupt ist glaube ich Überflüssig, die itoa wird doch gebraucht um ein int in char zu wandeln. hatte die mal weg gelassen und adc_Value direkt in usbMsgPtr geschrieben es kommt aber nichts an.
fastAn welchen Anschlüssen hängt dein Poti ? 5V und Masse ? Schleifer an ADC0 ?
2.5V, masse und adc0
Lesezeichen