Hallo Zusammen,
Ich versuche gerade irgendwie einen random Seed für mein rand() auf
einem STM8S003F3P6 zu erzeugen. Da mein Pin D3 noch nicht beschaltet ist
(hängt in der Luft), dachte ich mir, ich könnte einfach das Rauschen des
Pins via ADC messen und mir daraus den Seed generieren.
1 | #define ADC_PORT GPIOD
|
2 | #define ADC_PIN GPIO_PIN_3
|
3 | #define ADC_CHANNEL ADC1_CHANNEL_4
|
4 |
|
5 |
|
6 | static void locADCConfig(void)
|
7 | {
|
8 | /* initialize ADC pin */
|
9 | GPIO_Init(ADC_PORT, ADC_PIN, GPIO_MODE_IN_FL_NO_IT);
|
10 |
|
11 | /* De-Init ADC1 peripheral */
|
12 | ADC1_DeInit();
|
13 |
|
14 | /* init */
|
15 | ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS,
|
16 | ADC1_CHANNEL_4,// AIN4 -> PD3
|
17 | ADC1_PRESSEL_FCPU_D2,
|
18 | ADC1_EXTTRIG_TIM,
|
19 | DISABLE,
|
20 | ADC1_ALIGN_RIGHT,
|
21 | ADC1_SCHMITTTRIG_CHANNEL4,
|
22 | DISABLE);
|
23 |
|
24 | ADC1_StartConversion();
|
25 |
|
26 | return;
|
27 | }
|
Wenn ich nun in der main in einer Schleife den ADC Wert abfrage, bekomme
ich immer den selben Wert.
1 | locADCConfig();
|
2 |
|
3 | while(1)
|
4 | {
|
5 | wValue = ADC1_GetConversionValue();
|
6 | _delay_ms(1000);
|
7 | }
|
Der Wert ist zum Beispiel 0x9C00, auch nach dem Neustart und wenn ich
den Finger auf den ADC-Pin lege. Füge ich irgendwo Code hinzu und
kompiliere, ist der Wert meist ein anderer, zum Beispiel 0x9500.
Was kann da falsch sein?
Grüße
Chris