Forum: Mikrocontroller und Digitale Elektronik ACD Atmega16 PortA als Eingang 0x00 setzen


von T. G. (to_m)


Lesenswert?

Hallo

mal eine Frage, wenn ich den ADC des ATmega 16 verwendne möchte und der 
Debugger zurückgibt, dass das Register ADCSRA nicht gefunden wird, kann 
das daran liegen, dass ich PortA nicht als Eingang (0x00) definiert 
habe?

Ist das notwendig oder warum wird das Register nicht erkannt:

Hier der C-Code fehlt da noch was?
1
#define F_CPU  4000000UL
2
#include <avr/io.h>
3
#include <stdio.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6
7
8
int main(void)
9
{
10
  
11
  DDRB = 0xFF;
12
  unsigned char i;
13
  
14
  LCD_init();
15
  
16
  
17
  //Configure ADC
18
  //Enable interrupts function in ADC
19
  //8-Bit or 10-Bit results
20
  //1,000,000/50,000 =100/5=20 1,000,000/200,000 = 10/2 =5
21
  ADCSRA |= 1<<ADPS2;
22
  ADMUX |= 1<<ADLAR;
23
  ADCSRA |= 1<<ADIE;
24
  ADMUX |= 1<<REFS0;
25
  //Enable a prescaler-determine by the internal/external clock
26
  
27
  //Turn on the ADC feature
28
  ADCSAR |= 1<<ADEN;
29
  //Enable the global interrupts
30
  sei();
31
  //Start the first conversion
32
  
33
  ADCSRA |= 1<<ADSC;
34
  
35
  
36
  
37
  while(1)
38
  {
39
    //for(i=0;i<2;i++)
40
    LCD_blink();
41
    
42
    //PORTB = 0xFF;
43
    //_delay_us(1000);
44
    //PORTB = 0x00;
45
    //_delay_us(1000);
46
    
47
    //for(i=0;i<15;i++)
48
    //LCD_scroll(0);
49
    
50
    //for(i=0;i<4;i++)
51
    //LCD_scroll(1);
52
    
53
    //for(i=0;i<2;i++)
54
    //LCD_scroll(0);
55
  }
56
}
57
58
59
// Add the interrupt routine and display the results
60
ISR(ADC_vect)
61
{
62
  //LCD String variable declaration
63
  char adcResult[4];
64
  itoa(ADCH, adcResult, 10);
65
66
67
  //Convert the ADC Conversion result
68
  //Select a location on the LCD to display the number
69
  LCD_goto(1,1);
70
  //Display the string on the LCD
71
  //LCD_send_string(adcResult);
72
  LCD_send_command(adcResult);    
73
74
75
  ADCSRA |= 1<<ADSC;
76
  
77
}
78
void LCD_init()
79
{
80
  LCD_CNTRL_DDR = 0xFF;
81
  LCD_CNTRL_PORT = 0x00;
82
  LCD_DATA_DDR = 0xFF;
83
  LCD_DATA_PORT = 0x00;
84
  
85
  _delay_ms(50);
86
  //LCD_send_command(0x38);
87
  //LCD_send_command(0x0C);
88
  LCD_send_command(0x01);
89
  //LCD_send_command(0x0E);
90
  _delay_ms(1000);
91
  LCD_send_command(0x14);
92
  LCD_send_command(0x0F);
93
  //LCD_send_command(0x01);
94
   //_delay_ms(10);
95
  LCD_send_command(0xFF);
96
  
97
  //LCD_send_command(0x06);
98
     
99
}
100
101
void LCD_goto(unsigned char y, unsigned char x)
102
{
103
  unsigned char firstAddress[] = {0x80,0xC0,0x94,0xD4};
104
  
105
  LCD_send_command(firstAddress[y-1] + x-1);
106
  _delay_ms(10);
107
}

von spess53 (Gast)


Lesenswert?

Hi

> ... wenn ich den ADC des ATmega 16 verwendne möchte und der
>Debugger zurückgibt, dass das Register ADCSRA nicht gefunden wird, kann
>das daran liegen, dass ich PortA nicht als Eingang (0x00) definiert
>habe?

Nein.

MfG Spess

von Thomas E. (thomase)


Lesenswert?

T. G. schrieb:
> Ist das notwendig oder warum wird das Register nicht erkannt:

> ADCSAR |= 1<<ADEN;
      ^^
Aber wie kommst du darauf, dass das etwas mit dem Debugger zu tun haben 
könnte?

mfg.

von der alte Hanns (Gast)


Lesenswert?

"Nur Hanns benahm sich wie immer daneben, schlug sich auf die Schenkel 
und gluckste."

von holger (Gast)


Lesenswert?

>> ADCSAR |= 1<<ADEN;
>      ^^
>Aber wie kommst du darauf, dass das etwas mit dem Debugger zu tun haben
>könnte?

Das kann aber nicht durch einen Compiler gegangen sein.
Der hätte mit Fehler abgebrochen.

Wir sehen also mal wieder Sourcecode der mit dem Problem
nichts zu tun hat.

von Hobby-Psychologe (Gast)


Lesenswert?

der alte Hanns schrieb:
> "Nur Hanns benahm sich wie immer daneben, schlug sich auf die
> Schenkel
> und gluckste."

Nicht ganz fit? Abartiger Humor.
Wie blöde muß man sein, um sich an einem Schreibfehler aufzugeilen?

Das wird immer schlimmer hier...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

holger schrieb:
> Das kann aber nicht durch einen Compiler gegangen sein.
> Der hätte mit Fehler abgebrochen.
 Hat er wahrscheinlich auch mit so etwas wie:
 "error: 'ADCSAR' undeclared..."
 Dass der TO das falsch gelesen hat, wundert mich nicht, da er das
 auch falsch geschrieben hat.

> Wir sehen also mal wieder Sourcecode der mit dem Problem
> nichts zu tun hat.
 Nein, wir sehen mal wieder jemanden, der nicht imstande ist, die
 vom Compiler erzeugten Fehlermeldungen mitzuschicken.
 Dass etwas vom Compiler akzeptiert wird aber nicht vom Debugger, kann:
  a) Nicht sein.
  b) Falscher Typ im Debugger ausgewählt.

von der alte Hanns (Gast)


Lesenswert?

> Abartiger Humor
Ich will es erklären.

Der Fragende ist nicht einmal in der Lage, das allererste Wort richtig 
zu schreiben. Er benutzt ganz offensichtlich ein fremdes Programm, ohne 
Hinweis auf den Autor; schafft es irgendwie, dort einen Schreibfehler 
hineinzubringen, kann dann aber die Fehlermeldung nicht richtig lesen 
und wiedergeben.
So weit, so gut (bzw. schlecht).
Lustig fand ich nur, dass dies perfekt zu der hier im Forum 
vorherrschenden Meinung passt, dass Schreibfehler belanglos sind, es 
versteht ja ohnehin jeder, was gemeint ist.
Und dann kommt so ein tool und macht den Spielverderber.

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
Noch kein Account? Hier anmelden.